<script language=javascript>
var str='<a href="..." onclick="if(this.href.length>30)alert(\'too big\')">texttexttext</a>'
obj=document.createElement("div")
obj.innerHTML=str
alert(obj.getElementsByTagName("a")[0].innerHTML)
obj.removeNode(true)
</script>
var str='<a href="..." onclick="if(this.href.length>30)alert(\'too big\')">texttexttext</a>'
obj=document.createElement("div")
obj.innerHTML=str
alert(obj.getElementsByTagName("a")[0].innerHTML)
obj.removeNode(true)
</script>
感谢回复!
但,还是不行......
aa<b> > </b> < bb
<br/><u>xi
</u>
</textarea>
<input type="button" value="ok" onclick="var e=document.getElementById('txt'); e.value=e.value.replace(/<\/?[^<>]+>/g, '')">
如果是上面的条件可以用下面的代码。
单凭现在的条件用一个正则很难实现,用多个到是可以的,首先先把奇数的"和'全替换成别的特殊字符,然后替换特殊字符+ .*? + > + .*? + ["'],然后用上面的正则替换掉<>之间的内容就可以了,类似一个小型的语法分析器
<script language=javascript>
var str='<a href="..." onclick="if(this.href.length>30)alert(\'too big\')">texttexttext</a>'
re=/\/?<.+?(>(?=((([^>]*?)<)|$)))/g
alert(str.replace(re,''))
</script>
aa<b disabled style="color: red" > > </b> < bb
<br/><u>xixxxxxxxxxxxxxxxxxx
<a href="..." onclick="if(this.href.length>30)alert('too big')">texttexttext</a>
</u>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JavaScript">
<!--
function mm()
{
var e=document.getElementById('txt');
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\'[^\']*\'|\"[^\"]*\"))*)*\/?\s*>/g, '');
}
//-->
</SCRIPT>
可惜这个匹配不了文本中包含>这个的情况\/?应该可以去掉吧
<textarea id="txt" style="width: 100%; height: 200px">
<a href="..." onclick="if(this.href.length>30)alert('too big')" name=asd>texttexttext</a>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JavaScript">
<!--
function mm()
{
var e=document.getElementById('txt');
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\'[^\']*\'|\"[^\"]*\"))*)*\/?\s*>/g, '');
}
//-->
</SCRIPT>
我说的没能处理的那10%就是你所说的情况,name后面没有引号,就会出问题。
<textarea id="txt" style="width: 100%; height: 200px">
aa<b disabled style="color: red" > > </b> < bb
<br/><u>xixxxxxxxxxxxxxxxxxx
<a href="..." onclick="if(this.href.length>30)alert('too big')">texttexttext</a>
</u>
<a href="..." onclick="if(this.href.length>30)alert('too big')" name=asd>texttexttext</a>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JavaScript">
<!--
function mm()
{
var e=document.getElementById('txt');
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\'[^\']*\'|\"[^\"]*\"))*)*[^'"]*?>/g, '');
}
//-->
</SCRIPT>
<a href="..." onclick=if(this.href.length>30)alert('too big') name=asd>texttexttext</a>
不能正确匹配....这就是我说的“在上述情况下,等号后面的值中,如果有‘>’的话....”
<script>
var str="ab123<html><def456>c7ghi<htmljkl890</html>mno12p>qrs345<tu>vw</html3>x4y5z6789";
var reg=/(?:<html.*?>)((\n|\r|.)*?)(?:<\/html>)/g;
var result=str.replace(reg,"$1");
alert("原式为:"+str+"\n 替换后:"+result);
</script>
这句正确匹配。(变化体现在name中,现在name的值是“as<d”)<a href="..." onclick="if(this.href.length>30)alert('too big')" name=as>d>texttexttext</a>
这句就错了 :( (现在name的值是“as>d”)
嘿嘿,俺是不是心黑了点?
aa<b disabled style="color: red" > > </b> < bb
<br/><u>xixxxxxxxxxxxxxxxxxx
<a
href="..." onclick="if(this.href.length>30)alert('too big')">texttexttext</a>
<a href="..." onclick="if(this.href.length>30)alert('too big')" name=asd>texttexttext</a>
</u>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JavaScript">
<!--
function mm()
{
var e=document.getElementById('txt');
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\'[^\']*\'|\"[^\"]*\"|[^\s\'\"<>]+))*)*\/?\s*>/g, '');
}
//-->
</SCRIPT>
<a href="..." onclick="if(this.href.length>30)alert('too big')">texttexttext</a>
里用正则表达式取出“texttexttext”的,呵呵
你的代码可以运行起来,不过需要改为<script language="javascript">后才能执行。To 天外水火:
<a href="..." onclick=if(this.href.length>30)alert('too big') name=asd>texttexttext</a>
这是非法的HTML代码。onclick事件不会被执行。所以如果在正确的页面中,这种情况应该是不会存在的。第二个小Bug也是小概率事件 :)
比如:
var s1='"';
var s2='\"';
s1和s2是全相等的。
<a href="..." onclick="if(this.href.length>30)alert(\"too big\")" name=asd>texttexttext</a>
这种写法本身就是非法的啊,也就是说
onclick="if(this.href.length>30)alert(\"too big\")"
当于
onclick="if(this.href.length>30)alert("too big")",
所以对于一个正确的页面,是不太应该出现的。
这是非法的HTML代码。onclick事件不会被执行”呢?<a href="page2.html" onClick="count++;alert(count);">下一页</a>2、弱弱的问下,那个正则[!\w\-:]什么意思
<textarea id="txt" style="width: 100%; height: 200px">
aa<b disabled style="color: red" > > </b> < bb
<br/><u>xixxxxxxxxxxxxxxxxxx
<a
href="..." onclick="if(this.href.length>30)alert('too big')">texttexttext</a>
<a href="..." onclick="if(this.href.length>30)alert('too big')" name=asd>texttexttext</a>
<a href="..." onclick="if(this.href.length>30)alert(\"too big\")" name=asd>texttexttext</a>
</u>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JavaScript">
<!--
function mm()
{
var e=document.getElementById('txt');
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\'(?:((\\\')|[^\']))*\'|\"(?:((\\\")|[^\"]))*\"|[^\s\'\"<>]+))*)*\/?\s*>/g, '');
}
//-->
</SCRIPT>
strCNLetter = Regex.Replace(strMyHtml,"<[^>]*>", "");
strCNLetter = Regex.Replace(strCNLetter,"\\s+", " ");//替换空格
</?\w+((\s+\w+(\s*=\s*(?:".*?"|\'.*?\'|[^\'">\s]+))?)+\s*|\s*)/?>
似乎比楼上几位大大的要简练一些,而且那此敏感字符都能够被正确处理。此表达式,值得收藏!!!!
呵呵,加这个东西应该没有问题,只是我想试试不用非贪婪和预查,是否也能解决问题-----------------------------------------------------------
上边这句应该是有含义的,我涉足程序的时间比较短,对版本方面的知识还要多学习,查了下资料,手头上没有低版本的机器,没办法测试,帖出来大家看看非贪婪匹配 ie5.0以上(不含5.0)
预查 ie5.0以上(不含5.0)
replace()function返回不同的匹配值 5.5以上