贪婪匹配:
- ?,{n},{n,m}重复类具有弱贪婪性,表现为贪婪的有限性。
- *,+,{n,}重复类具有强贪婪性,表现为贪婪的无限性。
- 越是排在左边的重复类量词匹配优先级越高。
// 例:
var s = "<html><head><title></title></head><body></body></html>";
var r = /(<.*>)(<.*>)/
var a = s.match(r);
console.log(a[1])//左侧表达式匹配"<html><head><title></title></head><body></body>"
console.log(a[2])//右侧表达式匹配“</html>”
惰性匹配: 在满足条件的前提下,尽可能少的匹配字符。 定义惰性匹配的方法:在重复类量词后面添加问号?限制词。
// 例:
var s = "<html><head><title></title></head><body></body></html>";
var r = /<.*?>/
var a = s.match(r); //返回单个元素数组["<html>"]
在上面示例中,对于正则表达式 /<.*?>/ 来说,它可以返回匹配字符串 "<>",但是为了能够确保匹配条件成立,在执行中还是匹配了带有 4 个字符的字符串“html”。惰性取值不能够以违反模式限定的条件而返回,除非没有找到符合条件的字符串,否则必须满足它。
针对 6 种重复类惰性匹配的简单描述如下:
• {n,m}?:尽量匹配 n 次,但是为了满足限定条件也可能最多重复 m 次。
• {n}?:尽量匹配 n 次。
• {n,}?:尽量匹配 n 次,但是为了满足限定条件也可能匹配任意次。
• ??:尽量匹配,但是为了满足限定条件也可能最多匹配 1 次,相当于 {0,1}?。
• +?:尽量匹配 1 次,但是为了满足限定条件也可能匹配任意次,相当于 {1,}?。
• *? :尽量不匹配,但是为了满足限定条件也可能匹配任意次,相当于 {0,}?。
边界量词
声明量词:暂无
反向引用:零宽断言、负向零宽断言
零宽断言:\b,^,$这样指定一个位置,这个位置具有一定的条件(断言),因此他们也被称为零宽断言。
- (?=exp) 零宽度正预测先行断言,他断言自身出现的位置的后面的匹配表达式,比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。
- (?<=exp) 也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。
负向零宽断言:
- (?!exp) 零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。 (?<!exp) 零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。