一个字符串如下: (12P33)P(P23&P).
期望效果只能匹配 不在括号里面的P ,在括号里面的所有P都认为不符合条件,求思路 谢谢
在线等
正则表达式

解决方案 »

  1.   

    <script>
    var s = '(12P33)P(P23&P)';
    var r1 = /\(.*?\)/g, r2 = /#\$(\d+)\$#/g, i = 0, a = [];
    s = s.replace(r1, function($){
    a.push($);
    return '#$'+ (i++) +'$#';
    })
    s = s.replace(/p/ig, '你要替换的');
    s = s.replace(r2, function($, $1){
    return a[$1];
    });
    alert( s )
    </script>
    先把括号内的“隐藏”了,再来替换括号外的p,最后把隐藏的再显示出来
      

  2.   

    我假定,你要把匹配的P全部都替换成Q,代码如下:<script>
        var s = '(12P33)P(P23&P)';
        var r1 = /(\(.*?\))*P(\(.*?\))*/g
        s = s.replace(r1, "Q")
        alert( s )
    </script>
      

  3.   

    1樓已經給出了很好的解決方案.
    不過當:var s = '(12P33)#$0$#P(P23&P)'時會出現問題;
    這種情況很少,但也可能出現;
    建議:var s = '(12P33)#$0$#P(P23&P)';
    var r1 = /\(.*?\)/g, r2 = /\((\d+)\)/g, i = 0, a = [];
    s = s.replace(r1, function($){
    a.push($);
    return '('+ (i++) +')';
    });
    s = s.replace(/p/ig, '你要替换的');
    s = s.replace(r2, function($, $1){
    return a[$1];
    });
    alert( s )