js中贪婪和惰性匹配

正则表达的匹配模式包括了贪婪匹配,惰性匹配和支配性匹配。由于js中没有支配性匹配,所以这里我主要介绍一下前两者。

贪婪匹配:

  表示方法:简单量词都是贪婪匹配。(? , * , +)

  描述:贪婪匹配是先匹配整个字符串,匹配原则类似在正则表达式末尾加上$。如果匹配失败,则去掉最末位,重新进行上一个操作。直到匹配成功(这里需要进行最大量匹配,比如说/.*aa/,则会匹配到aa之前的所有字符,而不仅仅是aa之前第一个),如果是全局匹配,匹配成功之后还可以在此基础上继续进行匹配操作,或者是匹配失败。

  示例:

    var temArr = "abzbaabxbaaabcb12";  //(用网上比较流行的例子稍作变化来演示)

    var regex = /.*b.{1}b/g;

    var result = temArr.match(regex);

    alert(result.length);   //3

    alert(result[0]);     //abzb

    alert(result[1]);   //abxb

    alert(result[2]);   //abcb

    下面演示一下具体的操作:

    "abzbaabxbaaabcb12".match(/.?b.{1}b$/g)  //null

    "abzbaabxbaaabcb1".match(/.?b.{1}b$/g)  //null

    "abzbaabxbaaabcb".match(/.?b.{1}b$/g)  //abcb(保存)

    "abzbaabxbaaabc".match(/.?b.{1}b$/g)  //null

    "abzbaabxb".match(/.?b.{1}b$/g)  //abxb(保存)

    "abzbaabx".match(/.?b.{1}b$/g)  //null

    "abzb".match(/.?b.{1}b$/g)  //abzb(保存)

    值得注意的是,虽然演示中保存的顺序是从右到左abcb,abxb,abzb,但是输出顺序仍然是按照从左到右的顺序abzb,abxb,abcb

惰性匹配:

  表示方法:在量词后面添加'?'。(?? , *? , +?)

  描述:惰性匹配与贪婪匹配正好相反,是从左往右进行匹配。先匹配第一个字符(匹配方式与上面贪婪匹配一样,在正则表达式后面添加$),如果第一个数据匹配失败,则新添加一个字符。直到匹配成功,如果是全局匹配,匹配成功之后还可以在此基础上继续进行匹配操作。

  示例:

    var temArr = "abzbaabxbaaabcb12";

    var regex = /.*?b.{1}b/g;

    var result = temArr.match(regex);

    alert(result.length);   //3

    alert(result[0]);     //abzb

    alert(result[1]);   //aabxb

    alert(result[2]);   //aaabcb

    下面演示一下具体的操作:

    "a".match(/.*?b.{1}b$/g)  //null

    "abzb".match(/.*?b.{1}b$/g)  //abzb(保存)

    "a".match(/.*?b.{1}b$/g)  //null

    "aabxb".match(/.*?b.{1}b$/g)  //aabxb(保存)

    "a".match(/.*?b.{1}b$/g)  //null

    "aaabcb".match(/.*?b.{1}b$/g)  //aaabcb(保存)

你可能感兴趣的:(js中贪婪和惰性匹配)