Javascript 正则表达式惰性模式的一个问题?

正则表达式惰性模式,表示如果表达式能匹配成功前提下,会尽可能的少匹配字符。

根据字面意思理解,看我如下代码


var pattern=/a(\w*?)/;  

var str='a123a';  

console.log(str.replace(pattern,'$1'));

我预期输出的是 '1',因为惰性模式,匹配一个字符就可以使之匹配成功

可实际输出的是 '123a',与贪婪模式输出一摸一样


这是为什么?


慕尼黑的夜晚无繁华
浏览 471回答 2
2回答

慕莱坞森

*表示匹配0到多次,所以最少匹配0个字符,因为是惰性匹配,所以匹配一个空字符串,也就是/a(\w*?)/和/a/是等价的;$1表示第一个分组的内容,所以$1恒等于空字符串;因此,str.replace(pattern, '$1')等价于str.replace(/a/, ''),也就是把字符串中的第一个a替换成空字符串;注意/a/并不是全局匹配,所以只替换了第一个a;如果想替换所有的a,需要把pattern设置成全局匹配pattern = /a(\w*?)/g;

绝地无双

$1匹配的是第一个() 也就是分组中的匹配内容w表明匹配所有字符串 后面的表示出现0或者任意次 ?比如do 可以匹配do或者doo 既然a后面有值那么就全匹配上了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript