问题是:把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>
<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>
<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>
<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>