猿问

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

正则表达式惰性模式,表示如果表达式能匹配成功前提下,会尽可能的少匹配字符。根据字面意思理解,看我如下代码
varpattern=/a(\w*?)/;
varstr='a123a';
console.log(str.replace(pattern,'$1'));
我预期输出的是'1',因为惰性模式,匹配一个字符就可以使之匹配成功可实际输出的是'123a',与贪婪模式输出一摸一样
这是为什么?
MYYA
浏览 340回答 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

相关分类

JavaScript
我要回答