51-正则例子

link

1. js正则表达式(.+)和(.+?)的区别

?疑问号让.+的搜索模式从贪婪模式变成惰性模式。

1
2
3
4
5
var str = 'aaa<div style="font-color:red;">123456</div>bbb'

<.+?>会匹配<div style="font-color:red;">

<.+>会匹配<div style="font-color:red;">123456</div>

要在浏览器测试结果的话,输入:

1
2
3
4
5
var str = 'aaa<div style="font-color:red;">123456</div>bbb'

str.match(/<.+?>/);

str.match(/<.+>/);

2. js的正则表达式的正则前瞻(?=)和非捕获性分组(?:)有什么区别?

(?=)会作为匹配校验,但不会出现在匹配结果字符串里面

(?:)会作为匹配校验,并出现在匹配结果字符里面,它跟(…)不同的地方在于,不作为子匹配返回。

1
2
3
4
var data = 'windows 98 is ok';
data.match(/windows (?=\d+)/); // ["windows "]
data.match(/windows (?:\d+)/); // ["windows 98"]
data.match(/windows (\d+)/); // ["windows 98", "98"]

正则表达式中?=和?:和?!的理解

1
2
3
4
5
6
7
8
前瞻:
exp1(?=exp2) 查找exp2前面的exp1
后顾:
(?<=exp2)exp1 查找exp2后面的exp1
负前瞻:
exp1(?!exp2) 查找后面不是exp2的exp1
负后顾:
(?<!=exp2)exp1 查找前面不是exp2的exp1

链接