<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>

解决方案 »

  1.   

    找了一个老外写的,也不行 :("<[^>]*(>|$)/"
      

  2.   

    To meizz :
    感谢回复!
    但,还是不行......
      

  3.   

    代码我是测试过的。<textarea id="txt" style="width: 100%; height: 200px">
    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, '')">
      

  4.   

    这个问题还要具体情况具体分析下,比如具体的情况中,中间的内容中肯定没有>字符等等条件,
    如果是上面的条件可以用下面的代码。
    单凭现在的条件用一个正则很难实现,用多个到是可以的,首先先把奇数的"和'全替换成别的特殊字符,然后替换特殊字符+  .*?  +  > +  .*?  +  ["'],然后用上面的正则替换掉<>之间的内容就可以了,类似一个小型的语法分析器
    <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>
      

  5.   

    我想应该是这样的匹配规则:左尖括号+若干多字符+下一个左尖括号之前的最后一个右括号在此之间的全部认为是Match的。
      

  6.   

    /(?:<html.*?>)((\n|\r|.)*?)(?:<\/html>)/
      

  7.   

    没看清楚题目:sorry<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>
    </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>
      

  8.   

    上面我的还有些问题 改成re=/<.+?(>(?=((([^>]*?)<)|(\s*$))))/g
    可惜这个匹配不了文本中包含>这个的情况\/?应该可以去掉吧
      

  9.   

    梅钻的思路应该是=后面的“”或‘’吧,但是如果有下面这种就匹配不了了
    <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.   

    我终于知道红钻是怎么炼成的了 :)太谢谢meizz(梅花雪)了!!!meizz写的表达式至少能够处理90%的情况!对于这个问题我已经比较满意了,就算是已经解决了,再放两天,给大伙看看后就结帖,哈哈
      

  11.   

    To 天外水火(我要多努力)) :
    我说的没能处理的那10%就是你所说的情况,name后面没有引号,就会出问题。
      

  12.   

    做老本行,研究了下梅老大的代码,我改了点,:)
    <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>
      

  13.   

    在上述情况下,等号后面的值中,如果有“>”的话,则这个右尖括号单纯从字符角度看,和HTML标记的右尖括号似乎已经没有区别了。PS:写程序的是应该追求完美,但总是这样麻烦别人,我还是有点过意不去的:) 不过meizz能再完善一下那就最好拉,哈哈,再次感谢 !
      

  14.   

    AO,一个小问题:
    <a href="..." onclick=if(this.href.length>30)alert('too big') name=asd>texttexttext</a>
    不能正确匹配....这就是我说的“在上述情况下,等号后面的值中,如果有‘>’的话....”
      

  15.   

    恐怕这种情况HTML解析也应该从中间的>结束吧,后面的>应该算在页面内容中
      

  16.   

    晕倒,没人理我正则:/(?:<html.*?>)((\n|\r|.)*?)(?:<\/html>)/代码:
    <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>
      

  17.   

    AO,一个小问题之二:<a href="..." onclick="if(this.href.length>30)alert('too big')" name=as<d>texttexttext</a>
    这句正确匹配。(变化体现在name中,现在name的值是“as<d”)<a href="..." onclick="if(this.href.length>30)alert('too big')" name=as>d>texttexttext</a>
    这句就错了 :(    (现在name的值是“as>d”)
    嘿嘿,俺是不是心黑了点?
      

  18.   

    对于有转义的 \" \" 还是不行:<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>
    </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>
      

  19.   

    To zhangfmIT():哈哈,不是不理你,是你的代码在我这边运行不了,总出错,所以我也没法试验了啊而且,我主要是来问如何从
    <a href="..." onclick="if(this.href.length>30)alert('too big')">texttexttext</a>
    里用正则表达式取出“texttexttext”的,呵呵
      

  20.   

    To zhangfmIT() again:
    你的代码可以运行起来,不过需要改为<script language="javascript">后才能执行。To 天外水火:
    <a href="..." onclick=if(this.href.length>30)alert('too big') name=asd>texttexttext</a>
    这是非法的HTML代码。onclick事件不会被执行。所以如果在正确的页面中,这种情况应该是不会存在的。第二个小Bug也是小概率事件 :)
      

  21.   

    在DHTML中, "  和  \"  它们的长度都是一。也就是说,它们实际上是同一个东西。
    比如:
    var s1='"';
    var s2='\"';
    s1和s2是全相等的。
      

  22.   

    是啊,现在的问题是meizz说的那个还行
    <a href="..." onclick="if(this.href.length>30)alert(\"too big\")" name=asd>texttexttext</a>
      

  23.   

    <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")",
    所以对于一个正确的页面,是不太应该出现的。
      

  24.   

    1、为什么“<a href="..." onclick=if(this.href.length>30)alert('too big') name=asd>texttexttext</a>
    这是非法的HTML代码。onclick事件不会被执行”呢?<a href="page2.html" onClick="count++;alert(count);">下一页</a>2、弱弱的问下,那个正则[!\w\-:]什么意思
      

  25.   

    <a href="..." onclick="if(this.href.length>30)alert('too big')" name=as>d>texttexttext</a>呵呵,怎么去告诉程序name是as>d还是as呢,规范的写的话属性不是都加引号吗,那就ok了~
      

  26.   

    不管合不合了吧,也可以实现了,呵呵
    <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>
      

  27.   

    我用.NET是这么做的!
    strCNLetter = Regex.Replace(strMyHtml,"<[^>]*>", "");
    strCNLetter = Regex.Replace(strCNLetter,"\\s+", " ");//替换空格
      

  28.   

    又有新突破,我在国外的网站上,找到了PHP中,strip_tags()函数所使用的正则表达式了,如下:
    </?\w+((\s+\w+(\s*=\s*(?:".*?"|\'.*?\'|[^\'">\s]+))?)+\s*|\s*)/?>
    似乎比楼上几位大大的要简练一些,而且那此敏感字符都能够被正确处理。此表达式,值得收藏!!!!
      

  29.   

    引用 
    呵呵,加这个东西应该没有问题,只是我想试试不用非贪婪和预查,是否也能解决问题-----------------------------------------------------------
    上边这句应该是有含义的,我涉足程序的时间比较短,对版本方面的知识还要多学习,查了下资料,手头上没有低版本的机器,没办法测试,帖出来大家看看非贪婪匹配 ie5.0以上(不含5.0)
    预查 ie5.0以上(不含5.0)
    replace()function返回不同的匹配值 5.5以上