当前位置: 代码迷 >> JavaScript >> JS 非贪婪方式详解
  详细解决方案

JS 非贪婪方式详解

热度:127   发布时间:2012-11-01 11:11:32.0
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
  相关解决方案