正则表达式-贪婪与懒惰

阅读: 4136    发布时间: 2018-01-29 16:38:25

当正则表达式中包含重复元字符比如“*”、“+”,都会匹配尽可能多的字符,如“a.*b”,最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时候我们希望尽可能少的匹配满足条件的字符,我们称为 懒惰匹配。只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。

var patt=/a.*?b/g
var str="aabab"
console.log(str.match(patt))    //匹配到  aab 和  ab


  • *?:重复任意次,但是尽可能少的重复

  • +?:重复至少1次,,但是尽可能少的重复

  • ??:重复0或者1次,,但是尽可能少的重复

  • {n,m}?:重复n-m次,但是尽可能少的重复

var patt=/a.+?b/g

var str="aabab"
console.log(str.match(patt))   //匹配到aab


var patt=/a.??b/g

var str="aabbbab"
console.log(str.match(patt))   //匹配到aab 和 ab


-END-