问题是:把textarea1里面的内容,当做InputString,替换掉一些内容,见下面的注释。就是当包含关键词的标签中有a、script、img都不执行替换,不然要替换。请问这个正则应该如何写?
<html>
<body>
<textarea id="textarea1" style="height:240;width:960">
前部分关键词后部分                                                      //替换
<a href="#">前部分关键词后部分</a>                                      //不替换,包含在a中
<p><a href="#">前部分关键词后部分</a></p>                               //不替换,包含在a中
<div><p><a href="#">前部分关键词后部分</a></p></div>                    //不替换,包含在a中
<span><div><p><a href="#">前部分关键词后部分</a></p></div></span>       //不替换,包含在a中
<a><span><div>前部分关键词后部分</div></span></a>                       //不替换,包含在a中
<font><a href="#">前部分关键词后部分</a>前部分关键词后部分</font>       //只替换第二部分的关键词<img alt="前部分关键词后部分" />                                        //不替换,包含在img中
<span><img alt="前部分关键词后部分" /></span>                           //不替换,包含在img中
<div><span><img alt="前部分关键词后部分" /></span></div>                //不替换,包含在img中<script>alert("前部分关键词后部分");</script>                           //不替换,包含在script中
<span><script>alert("前部分关键词后部分");</script></span>              //不替换,包含在script中
<div><span><script>alert("前部分关键词后部分");</script></span></div>   //不替换,包含在script中
<span><div><script>alert("前部分关键词后部分");</script></div></span>   //不替换,包含在script中<div>前部分关键词后部分</div>                                           //替换
<span><div>前部分关键词后部分</div></span>                              //替换
<span><div>前部分关键词后部分</div>前部分关键词后部分</span>            //替换
</textarea>
<textarea id="textarea2" style="height:240;width:960"></textarea>
<script>
var str=document.getElementById("textarea1").value
var keyword = "关键词";
var re = new RegExp("???", "ig");
document.getElementById("textarea2").value = str.replace(re, keyword);
</script>
</body>
</html>

解决方案 »

  1.   

    用DOM那种方法会有很多问题,如果能用正则实现最理想了,因为这只是嵌套在许多js中的一小部分脚本。而且这是在其它网站上使用的,而脚本在我们的服务器上。
      

  2.   

    我只修改了下半部分,前边用你的<textarea id="textarea2" style="height:240;width:960"></textarea><br>
    <input type="button" id="btnReplace" value="开始替换" onclick='rpHtml("textarea1","textarea2")'>
    <a href="</a>">sldkfjlsfd</a>
    <script language="JavaScript">
    <!--
    function rpHtml(souId,tarId){
        //var tarTa = document.getElementById(tarId);
        var keyWord = "该处文本已经替换";
        var repWord="前部分关键词后部分";
        var strHtml = document.getElementById(souId).value;
        var arLink = [];
        var arImg = [];
        var arScript = [];
        //先处理掉所有的link,img,script文本
        var reg = /<a(\s|\S)*?<\/a>/gi; //匹配所有链接
        strHtml = strHtml.replace(reg,function(a){ arLink.push(a); return "Link_"+ (arLink.length-1) +"_$"; });
        reg = /<img(\s|\S)*?(\/>|<\/img>)/gi; //匹配所有图像
        strHtml = strHtml.replace(reg,function(a){ arImg.push(a); return "Img_"+ (arImg.length-1) +"_$"; });
        reg = /<script(\s|\S)*?<\/script>/gi; //匹配所有脚本
        strHtml = strHtml.replace(reg,function(a){ arScript.push(a); return "Script_"+ (arScript.length-1) +"_$"; });
        reg = new RegExp(repWord,"g");    //把其余的进行替换
        strHtml = strHtml.replace(reg,keyWord);    //再恢复link,img,script文本
        reg = /Link_(\d+)_\$/g; //恢复匹配所有链接
        strHtml = strHtml.replace(reg,function(a,b){ return arLink[b]; });
        reg = /Img_(\d+)_\$/g; //恢复匹配所有图像
        strHtml = strHtml.replace(reg,function(a,b){ return arLink[b]; });
        reg = /Script_(\d+)_\$/g; //恢复匹配所有脚本
        strHtml = strHtml.replace(reg,function(a,b){ return arLink[b]; });    document.getElementById(tarId).value = strHtml;
    }//-->
    </script>
    </body>
    </html>
      

  3.   

    昨天给的确实有点问题,修正下,思路和myvicy,zhaoxiaoyang两位兄弟的差不多 
    <html>
    <body>
    <textarea id="textarea1" style="height:240;width:960">
    前部分关键词后部分1                                                      //替换
    <a href="#">前部分关键词后部分2</a>                                      //不替换,包含在a中
    <p><a href="#">前部分关键词后部分3</a></p>                               //不替换,包含在a中
    <div><p><a href="#">前部分关键词后部分4</a></p></div>                    //不替换,包含在a中
    <span><div><p><a href="#">前部分关键词后部分5</a></p></div></span>       //不替换,包含在a中
    <a><span><div>前部分关键词后部分6</div></span></a>                       //不替换,包含在a中
    <font><a href="#">前部分关键词后部分7</a>前部分关键词后部分8</font>       //只替换第二部分的关键词<img alt="前部分关键词后部分9" />                                        //不替换,包含在img中
    <span><img alt="前部分关键词后部分10" /></span>                           //不替换,包含在img中
    <div><span><img alt="前部分关键词后部分11" /></span></div>                //不替换,包含在img中<script>alert("前部分关键词后部分12");</script>                           //不替换,包含在script中
    <span><script>alert("前部分关键词后部分13");</script></span>              //不替换,包含在script中
    <div><span><script>alert("前部分关键词后部分14");</script></span></div>   //不替换,包含在script中
    <span><div><script>alert("前部分关键词后部分15");</script></div></span>   //不替换,包含在script中<div>前部分关键词后部分16</div>                                           //替换
    <span><div>前部分关键词后部分17</div></span>                              //替换
    <span><div>前部分关键词后部分18</div>前部分关键词后部分19</span>            //替换
    </textarea>
    <textarea id="textarea2" style="height:240;width:960"></textarea>
    <script language=javascript>
    var str=document.getElementById("textarea1").value
    re=/((<a(.*?)>(.*?)<\/a>)|(<script(.*?)>(.*?)<\/script>|<img(.*?)>))/g
    strArray=str.match(re)
    str=str.replace(re,"|||")//|||随便定义
    str=str.replace(/[^|]/g,"")
    var i=0
    str=str.replace(/\|\|\|/g,function(){return strArray[i++]})
    document.getElementById("textarea2").value=str
    </script>
    </body>
    </html>