冰豆网

bingdou.net
分享网络精彩

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

时间:2019-07-08加入收藏

(.+)默认是贪婪匹配3A0冰豆网

(.+?)为惰性匹配3A0冰豆网

疑问号让.+的搜索模式从贪婪模式变成惰性模式。3A0冰豆网

var str = 'aaa<div style="font-color:red;">123456</div>bbb'3A0冰豆网

<.+?>会匹配<div style="font-color:red;">3A0冰豆网

<.+>会匹配<div style="font-color:red;">123456</div>3A0冰豆网

要在浏览器测试结果的话,输入:3A0冰豆网

var str = 'aaa<div style="font-color:red;">123456</div>bbb'3A0冰豆网

str.match(/<.+?>/);3A0冰豆网

str.match(/<.+>/);3A0冰豆网

下面举个简单的例子来说明。3A0冰豆网

1.贪婪匹配是先看整个字符串是否匹配,如果不匹配,它会去掉字符串的最后一个字符,并再次尝试。如果还不匹配,那么再去掉当前最后一个,直到发现匹配或不剩任何字符。3A0冰豆网
 3A0冰豆网

var str='abcdabceba'3A0冰豆网

/.+b/         //匹配一个或多个任意字符后面跟一个字母b3A0冰豆网

执行str.match(/.+b/)3A0冰豆网

第一次(先看整个字符串是否是一个匹配) abcdabceba 不匹配,然后去掉最后一个字符a3A0冰豆网

第二次(去掉最后一个字符后再匹配) abcdabceb 匹配,返回abcdabceb。3A0冰豆网

2.惰性匹配是从左侧第一个字符开始向右匹配, 先看第一个字符是不是一个匹配, 如果不匹配就加入下一个字符再尝式匹配, 直到发现匹配...3A0冰豆网

执行str.match(/.+?b/)3A0冰豆网

第一次(读入左侧第一个字符) a 不匹配加一个再式3A0冰豆网

第二次 ab 匹配,返回ab3A0冰豆网

当正则表达式中包含重复量词(如:*,?,+)时,通常的行为是匹配尽可能多的字符,比如:a(.*)b去匹配aabab字符串,它会匹配整个字符串,这被称为贪婪匹配。3A0冰豆网

$str = 'aabab';3A0冰豆网

preg_match("/a(.*)b/", $str, $matches);3A0冰豆网

print_r($matches);3A0冰豆网

有的时候我们需要懒惰匹配,也就是匹配尽可能少的字符,在量词后边加一个问号?,比如(.*?)在能使整个匹配成功的前提下使用最少的重复。3A0冰豆网

$str = 'aabab';3A0冰豆网

preg_match("/a(.*?)b/", $str, $matches);3A0冰豆网

print_r($matches);3A0冰豆网

TGA: php

分享到:

官方微信二维码冰豆网官方微信公众号