JS 非贪婪模式详解
首先, 先理解下概念: 非贪婪模式 即在正则后加问号"?" 意义为按需匹配,
不明白, 我们先往下看
共用函数:
// 即为字符串高亮为红色function hightlight(str){ return "<font color=red>"+str+"</font>";}
1. 首先, 正常使用如下(贪婪模式)
var reg = new RegExp('(a+)'); // a+为 一到多个a匹配var str = 'aaa';var newstr = str.replace(reg, hightlight);document.write(newstr + "<br/>");
输出: aaa
注: 以上代码等同于:
var reg = new RegExp('(a+)'); // a+为 一到多个a匹配var str = 'aaa';var newstr = str.replace(reg, "<font color=red>$1</font>"); //$1 表示正则中匹配括号内的内容的第一个document.write(newstr + "<br/>");
2. 同样是上边的例子, 我们使用非贪婪模式
var reg = new RegExp('(a+?)'); // 加上?号后为非贪婪模式, 即匹配完成即返回, 不继续var str = 'aaa';var newstr = str.replace(reg, hightlight);document.write(newstr + "<br/>");
输出: aaa
3. 非贪婪模式中应注意:
正则是从左到右开始匹配所有项, 直到匹配为止, 那么
如下, 它匹配的就应该是整段字符, 而不是单独的一个b
var reg = new RegExp('(a*?b)');var str = 'aaab';var newstr = str.replace(reg, hightlight);document.write(newstr);
输出: aaab