正则表达式

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

创建方式

  1. 通过RegExp对象创建正则:
var reg = new RegExp(/123/);
  1. 通过字面量创建正则:
var reg = /123/; //这里没有引号

测试正则(.test()):
用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

var reg = /abc/;
var str = "abcabc";
console.log(reg.test(str)); //true

匹配正则(.match()):
可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配

var reg = /abc/;
var str = "abccad";
console.log(str.match(reg)); //["abc", index: 0, input: "abccad", groups: undefined]

正则替换(.replace()):在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。该方法不会改变原字符串。

var reg = /abc/;
var str = "abcabcde";
console.log(str.replace(reg, "12")); //12abcde

正则表达式的属性(也称修饰符):

修饰符描述
iignoreCase,执行对大小写不敏感的匹配。
gglobal,执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
mmultiline,执行多行匹配。
var reg = /qwe/gi; //表示不区分大小写,并且全局搜索
var str = "QwEqweDQWE";
console.log(str.match(reg)); // ["QwE", "qwe", "QWE"]

方括号:方括号用于查找某个范围内的字符

表达式描述
[abc]查找方括号之间的任何字符。
[0-9]查找任何从 0 至 9 的数字。
(x|y)查找任何以 | 分隔的选项。注意 | 前后不要乱加空格,空格也是规则

一个中括号只代表一位,中括号里边的内容代表的是这一位可以取值的范围

var reg = /[0-9][2-9][4-9]/g;
var str = "124ad54ad211ad456";
console.log(str.match(reg)); //["124", "456"]

插入符 ^ 放到 [ ] 里边表示“”的意思:

var reg = /[^1][^a]/g;
var str = "123qwe4g";
console.log(str.match(reg));//["23", "qw", "e4"]

圆括号里可以加入"|“表示""的意思,”|"操作符两边放匹配规则

var reg = /(a|b)[^1][a-z]/g;
var str = "a2a12a4r";
console.log(str.match(reg));//["a2a", "a4r"]

元字符: 元字符是拥有特殊含义的字符,元字符也可以组合放进中括号里去使用,一个元字符代表一位

元字符描述
\w查找单词字符(字母+数字+下划线), [0-9A-z]
\W查找非单词字符
\d查找数字,[0-9]
\D查找非数字字符
\s查找空白字符,包括空格符[ ]、制表符\t、回车符\r、换行符\n、垂直换行符\v、换页符\f
\S查找非空白字符
\b匹配单词边界
\B匹配非单词边界
\t查找制表符
\n查找换行符
\f查找换页符
\v查找垂直制表符
\uXXXX查找以十六进制规定的Unicode字符,\u4e00~\u9fa5
.(点号)查找单个字符,除了换行和行结束符

量词:代表数量的词(下面表达式的n代表的是一个匹配规则,n后边符号的符号定义量词规则)。

量词描述
n+匹配任何包含至少一个 n 的字符串。1~多
n*匹配任何包含零个或多个 n 的字符串。 0~多
n?匹配任何包含零个或一个 n 的字符串。 0~1
n{X}匹配包含X 个n 的序列的字符串。刚好是X次
n{X, Y}匹配任何包含X 个至Y 个n 的序列的字符串。x~y
n{X, }匹配包含至少X 个n 的序列的字符串。x~多
n$匹配任何结尾为n 的字符串
^n匹配任何开头为n 的字符串
S(?=n)匹配任何其后紧接指定字符串n 的字符串S
S(?!n)匹配任何其后没有紧接指定字符串n 的字符串S

我们可以利用它们做一个简单的邮箱验证:

var reg = /^[0-9]\d{4,9}@(qq|163)\.(cn|com)$/;
var email1 = "2456777@qq.com";
var email2 = "24567779999999@qq.com";
var email3 = "2456777@163.cn";
var email4 = "2456777@163.con";
console.log(reg.test(email1)); //true
console.log(reg.test(email2)); //false
console.log(reg.test(email3)); //true
console.log(reg.test(email4)); //false

这里补充一个正则方法,可以分割成字符串数组split()
我们写一个去除运算符的正则表达式:

var reg = /(\+|\-|\*|\/|%)/;
var str = "8+3-2*40/20%10";
console.log(str.split(reg)); //["8", "3", "2", "40", "20", "10"]

再写一个例子,关于去除字符串中间的空格:

function clearMid(str) {
	var reg = /(\w+)\s+(\w)/;
	return str.replace(reg, "$1$2");
}
var str = "    hello   world    ";
console.log(clearMid(str)); // "   helloworld   "

这里用到了交换字符串的概念,详情请看文档介绍replace()方法的第二个参数MDN
基本的正则就是这些了。

接下来我们深入了解一下正则,这里会涉及到一个知识关于正则的引擎和回溯
我们来写一个例子:

	/* 
    1.\d这里指的是以一个数字开头
    2.?=代表先行断言,预判断,它不会匹配到。
    3.\b代表单词边界
    第一次找的是7,+代表一次,代表以2个数字结束
    第二次找的是5,+代表二次,此时以4个数字结束
    第三次找的是3,+代表三次,此时以6个字符结束
    ...
     */
    let reg = /(\d)(?=(\d{2})+\b)/g;
    let str = "0123456789";
    //只能匹配一个数字哟
    console.log(str.match(reg));//["1","3","5","7"]
    let res = str.replace(reg, "$1,");
    
    //相当于 0[1,]2[3,]4[5,]6[7,]89
    console.log(res); //结果 01,23,45,67,89

建议大家对着文档去理解这个正则 断言

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值