js正则表达式总结

1,\
斜杠用于转义,在js正则里,只有一些元字符(*,?,.等)和\本身需要转义,其他的不需要转义,如果其他的字符前面使用了\,可能会产生负面影响,比如\b,\t这些有特殊含义的转义。
此外,在js正则中,\还有一个用处在于使用new RegExp()形式创建正则对象时,比如new RegExp('a\*a'),其中*是乘以的意思,js引擎在解析该正则表达式字符串时,会消耗掉这个斜杠,最后生成的是a*a,这时候我们要这样写'a\\*a'2 ^
该元字符比较简单,就是表示该正则是从字符串的首字符开始匹配的,有一个地方需要注意的是,如果该正则表达式加了m标记时,匹配到了行分隔符的时候就会结束。然后会在下一行继续匹配。
'd\nd'.match(/^d/g) => ['d'], 'd\nd'.match(/^d/mg) =>  ["d", "d"]
3 $
该元字符和^一样,当含义$的正则匹配一个字符串时,他不是直接判断该字符串的结尾,而是以行结束符为分隔,对每一行的结尾进行匹配。
'd\nd'.match(/d$/g)	 => ['d'], 'd\nd'.match(/d$/mg)     = > ["d", "d"]
4 * + ?
这三个元字符代表的是匹配0到多个同样的字符组合,a*,a?,a+,分别代表匹配0到多个a,01个a,1到多个a。这是一种贪婪的匹配,也就是尽可能多地匹配后面符合条件的字符。
如果在这些元字符后面加上?,那么就代表是非贪婪匹配,也就是尽可能少地匹配。{n,m}和以上的情况类似,也可以在后面加?。
'ddd'.match(/d{1,11}/)  => ddd, 'ddd'.match(/d{1,11}?/) => d。
5 .
匹配除了行分隔符外的所有字符
6 捕获分组(x) \n $n RegExp.$n
()代表捕获分组,x代表的表达式所匹配的内容可以在x所有的正则中或者其他地方使用。
/(x)(y)\1\2/.test('xyxy') => true  /(x)(y)\1\2/.test('xyyy') => false,\n代表的是第n个捕获分组的值。
'xy'.replace(/(x)(y)/, "$1 and $2 ") => x and y, RegExp.$1 = x, RegExp.$2 = y,每次正则执行完后,捕获分组或挂载到RegExp对象上,并且清除上次执行的结果。
$&是一个特殊的变量,他代表是整个正则表达式匹配到的结果。也就是xy。
7 (?:x)
非捕获分组,也就是()中的表达式捕获到分组不可在其他地方使用。'x'.replace(/(?:x)/, "$1") => "$1"
8 x(?=y)
前向断言,断言x后面是y,但y不在捕获分组中,'x'.match(/x(?=y+)/) => null, 'xyy'.match(/x(?=y+)/) => x
9 x(?!y)
同上,断言x后面不是y。
10 [\b]
匹配(U+0008),键盘中的退格键。
11 \b
匹配单词的边界,如果匹配成功,匹配到内容的结果长度为0,单词边界的定义为,某一个位置,后面或者前面没有单词字符,则是单词边界。其中单词字符的定义为大小写字母+数字+_。其余的都为非单词字符。
/a\b/.test('a~b') => true,~被视为单词边界。/a\b/.test('ab') => false
12 \B
分单词边界,定义类似\b。/a\B/.test('ab') => true, /b\B/.test('ab')  => false,b的后面是'',属于单词边界,所以是false13 \w
单词字符,定义为[A-Za-z0-9_]
14 \W
非单词字符,定义为[^A-Za-z0-9_]
15 \s
所有空格,如制表符、垂直分隔符、水平分隔符,定义为[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。
16 \S
非空格符,定义为[^ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。
17 sticky
粘着位类似于全局匹配,当我们使用exec函数时,如果正则表达式中加了g,那么就会下次执行exec函数时就会从上次匹配的结束位置开始。
同样,我们可以通过加y标记来达到这个目的。
var x = /a/; x.exec('aa'), x.exec('aa'); lastIndex为上次匹配的位置,lastIndex为不会变,每次都匹配到第一个a
var x = /a/g; x.exec('aa'), x.exec('aa'); lastIndex会变,第n次匹配会匹配到第n个a
var x = /a/y; x.exec('aa'), x.exec('aa'); lastIndex会变,第n次匹配会匹配到第n个a,粘着位其实就是说上次匹配的位置会粘着(记着)
18 使用new RegExp()
动态生成正则时需要使用这种方式,但是需要对输入进行转义。需要对元字符进行修正,$&为每次匹配到的字符
function fix(str) {
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值