eg. : font<font color='red'>font</font>
假如我要替換f或o或n或t或等等 為 <b>f或o或n或t或等等</b>
但是又不希望<font和</font> 標籤中的font中替換掉。比如我要替換的是on
則我需要的結果是
f<b>on</b>t<font color='red'>f<b>on</b>t</font>我像了半天也沒想到什麼辦法。
故來求教

解决方案 »

  1.   

    javacript不支持(?<!)这样的零宽断言有时候确实比较麻烦。你试试下面这种。
    var str ="<t>font<font color='red'>font</font>aonf"str = str.replace(/([^<>]*)<|>([^<>]*)<|>([^<>]*)/g,
    function($_1){
      return $_1.replace('on','<b>on</b>') 
    })
    alert(str)
      

  2.   

    1、“為 <b>f或o或n或t或等等</b>”:
    "font<font color='red'>font</font>".replace(/(?=[^>]*(?=<))[font]/gi, "<b>$&</b>")
    2、“比如我要替換的是on”:
    "font<font color='red'>font</font>".replace(/(?=[^>]*(?=<))on/gi, "<b>$&</b>")
    3、哈哈,下次记得多给点分。
      

  3.   

    BTW:其实,JS正则最简洁强大,THAN OTHER`S。 
      

  4.   

    不错不错,我老想着零宽...

    不过需要微调
    "font<font color='red'>font</font>aonf".replace(/(?=[^>]*(?=<|$))on/gi, "<b>$&</b>")
      

  5.   

    正则其实是通用的。你的正则php直接copy过去,$&改成$0就可以了。
    然后如果用零宽,php较新的版本可以这样。$str = "font<font color='red'>font</font>aonf";
    echo preg_replace('#(?<!<f|</f)on#i', '<b>$0</b>',$str);