正则表达式去除大部分HTML标记js代码
正则表达式去除大部分HTML标记js代码 有需要的朋友可参考一下。
删除除了<img>、<br>、<p>之外所有的标签。子虚乌有给出代码中关键的一句:
o.innerHTML.replace(/(</?(?!br|p|img)[^>/]*)/?>/gi,''); 刚开始没反应过来,后来才想起来,这个正则不用区分起始和结束标签。
</?(?!br|p|img)
匹配除了保护标签外标签的起始标签或者是结束标签的一部分。
[^>/]*
匹配到>或者/就结束。
/?>
起始标签或者结束标签的结尾。
<h3>其它问题:</h3>
正则表达式通过变量传递后,被转义的困惑,如何避免值在赋给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>
实例,代码如下:
//所有行替换
function replacewrd(x,y)
{
y = y.replace(/\t/g,'t'); // 这里转下
var str=new Array();
}
实例,代码如下:
<script language="JavaScript">
function a(y)
{alert(y);}
</script>
<input id=newwrd type="button" value="($1)t$1" onclick="a(this.value)">
<input id=newwrd type="button" value="($1)t$1" onclick="alert(this.value)">