正则表达式去除大部分HTML标记js代码
删除除了<img>、<br>、<p>之外所有的标签。子虚乌有给出代码中关键的一句:
o.innerHTML.replace(/(</?(?!br|p|img)[^>/]*)/?>/gi,''); 刚开始没反应过来,后来才想起来,这个正则不用区分起始和结束标签。
</?(?!br|p|img)
匹配除了保护标签外标签的起始标签或者是结束标签的一部分。
[^>/]*
匹配到>或者/就结束。
/?>
起始标签或者结束标签的结尾。
其它问题
正则表达式通过变量传递后,被转义的困惑。如何避免值在赋给JS变量的过程中被转义
按钮一例子中:t代表制表符,那么替换以后t应该成为一个制表符而不是还是两个代码字母。如果说都不能转义,而为什么$1却完成了转义。
代码如下 | |
<html> <head><TITLE>test</TITLE> <script language=JavaScript> //所有行替换 function replacewrd(x,y) { var str=new Array(); var str=txt.innerText.split("n"); var tmp=''; for(i=0;i<str.length-1;i++) { tmp=tmp + str[i].replace(new RegExp(x,"ig"),y) + 'n'; } tmp=tmp + str[i].replace(new RegExp(x,"ig"),y); txt.innerText=tmp; } function AddPageNum() { var str=new Array(); var str=txt.innerText.split("n"); var tmp=''; for(i=0;i<str.length-1;i++) { tmp=tmp + str[i].toString().replace(/t(d{1,3})[rn]*$/ig,"($1)t$1n");//textarea的文本换行由rn组成 } tmp=tmp + str[i].toString().replace(/t(d{1,3})[rn]*$/ig,"($1)t$1");//可用[^.]*匹配不可见字符 txt.innerText=tmp; } </script> </head> <body> <div id="tools"> <input id=oldwrd type="text" value="t(d{1,3})[rn]*$" > <input id=p7 type="button" value="按钮一:替换成" onclick="replacewrd(oldwrd.value,newwrd.value);" > <input id=newwrd type="text" value="($1)t$1" > <br> <input id=p9 type="button" value="按钮二:添加(页码)" onclick="AddPageNum();"> </div> <textarea id=txt rows=25 cols=115> |
第一部分早年岁月 3
第一章建立自信 3
第二章脱颖而出 17
第三章掀掉屋顶 21
第四章在雷达下飞行 29
第五章逼近大联盟 38
第六章海阔凭鱼跃 48
第二部分建立哲学观 69
第七章面对现实与“阳奉阴违” 69
------------------------------
按钮一:企图通过替换,将每一个制表符t后面的页码,复制一份加上括号(),放到制表符前。但是input的value传递到函数中执行起来,t却不会转义为制表符。
按钮二:同样的正则代码直接内置在函数中运行则没问题。
【疑惑】按钮一例子中:t代表制表符,那么替换以后t应该成为一个制表符而不是还是两个代码字母。如果说都不能转义,而为什么$1却完成了转义。
</textarea>
</body>
</script>
</html>
实例
代码如下 | |
//所有行替换 |
实例
代码如下 | |
<script language="JavaScript"> |