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

转载于:https://www.cnblogs.com/lullabyus/archive/2012/03/07/2382873.html

猜你喜欢

转载自blog.csdn.net/weixin_33834910/article/details/93771284