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