正则表达式惰性模式,表示如果表达式能匹配成功前提下,会尽可能的少匹配字符。根据字面意思理解,看我如下代码varpattern=/a(\w*?)/;varstr='a123a';console.log(str.replace(pattern,'$1'));我预期输出的是'1',因为惰性模式,匹配一个字符就可以使之匹配成功可实际输出的是'123a',与贪婪模式输出一摸一样这是为什么?
2 回答
一只斗牛犬
TA贡献1784条经验 获得超2个赞
*表示匹配0到多次,所以最少匹配0个字符,因为是惰性匹配,所以匹配一个空字符串,也就是/a(\w*?)/和/a/是等价的;$1表示第一个分组的内容,所以$1恒等于空字符串;因此,str.replace(pattern,'$1')等价于str.replace(/a/,''),也就是把字符串中的第一个a替换成空字符串;注意/a/并不是全局匹配,所以只替换了第一个a;如果想替换所有的a,需要把pattern设置成全局匹配pattern=/a(\w*?)/g;
猛跑小猪
TA贡献1858条经验 获得超8个赞
$1匹配的是第一个()也就是分组中的匹配内容w表明匹配所有字符串后面的表示出现0或者任意次?比如do可以匹配do或者doo既然a后面有值那么就全匹配上了
添加回答
举报
0/150
提交
取消