700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > JavaScript HTML 如何用正则表达式去除字符串中的HTML标记??[以前的帖子...

JavaScript HTML 如何用正则表达式去除字符串中的HTML标记??[以前的帖子...

时间:2022-12-04 06:01:55

相关推荐

JavaScript HTML 如何用正则表达式去除字符串中的HTML标记??[以前的帖子...

JavaScript,HTML 如何用正则表达式去除字符串中的HTML标记??[以前的帖子都没有完全解决]

问题 于 -09-14 18:43

从网上找到了如下版本:

1."<[^>]+>|</[^>]+>"

2."<\/*[^<>]*>"

3."<(.*)>.*<\/\1>|<(.*) \/>"

都无法正确地从以下字符串中得到文字内容:

<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)">texttexttext</a>

应该再加上点条件限制就行了,可是我就是搞不定,所以还请高人指点啊!

响应者 1:

问题出在

第一个,少了转意字符\

第二个,贪婪模式所以不行

第三个,中间有回车换行符,.是不能匹配的

响应者 2:

还有些问题,问题很有意思

响应者 3:

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

响应者 4:

找了一个老外写的,也不行 :(

"<[^>]*(>|$)/"

响应者 5:

To 楼上的三星:

你的愿望是美好的,做起来是不可能滴。我是要在别处使用此表达式,不是在浏览器里 :(

还是表示感谢 ,呵呵

响应者 6:

/<\/?[^<>]+>/g

响应者 7:

To meizz :

感谢回复!

但,还是不行......

响应者 8:

因为里面有大于号,如果是纯正则,那还要想想

响应者 9:

代码我是测试过的。

<textarea>

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, ‘‘)">

响应者 10:

这个问题还要具体情况具体分析下,比如具体的情况中,中间的内容中肯定没有>字符等等条件,

如果是上面的条件可以用下面的代码。

单凭现在的条件用一个正则很难实现,用多个到是可以的,首先先把奇数的"和‘全替换成别的特殊字符,然后替换特殊字符+ .*? + > + .*? + ["‘],然后用上面的正则替换掉<>之间的内容就可以了,类似一个小型的语法分析器

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

响应者 11:

我想应该是这样的匹配规则:

左尖括号+若干多字符+下一个左尖括号之前的最后一个右括号

在此之间的全部认为是Match的。

响应者 12:

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

响应者 13:

没看清楚题目:sorry

<textarea>

aa<b disabled > > </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>

响应者 14:

上面我的还有些问题 改成re=/<.+?(>(?=((([^>]*?)<)|(\s*$))))/g

可惜这个匹配不了文本中包含>这个的情况

\/?应该可以去掉吧

响应者 15:

梅钻的思路应该是=后面的“”或‘’吧,但是如果有下面这种就匹配不了了

<textarea>

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

响应者 16:

我终于知道红钻是怎么炼成的了 :)

太谢谢meizz(梅花雪)了!!!

meizz写的表达式至少能够处理90%的情况!

对于这个问题我已经比较满意了,就算是已经解决了,

再放两天,给大伙看看后就结帖,哈哈

响应者 17:

To 天外水火(我要多努力)) :

我说的没能处理的那10%就是你所说的情况,name后面没有引号,就会出问题。

响应者 18:

做老本行,研究了下梅老大的代码,我改了点,:)

<textarea>

aa<b disabled > > </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>

响应者 19:

在上述情况下,等号后面的值中,如果有“>”的话,则这个右尖括号单纯从字符角度看,和html标记的右尖括号似乎已经没有区别了。

PS:写程序的是应该追求完美,但总是这样麻烦别人,我还是有点过意不去的:) 不过meizz能再完善一下那就最好拉,哈哈,再次感谢 !

响应者 20:

哈哈,更加感谢天外水火!

现在的代码很完美啊,暂时没有发现问题 :)

响应者 21:

AO,一个小问题:

<a href="..." onclick=if(this.href.length>30)alert(‘too big‘) name=asd>texttexttext</a>

不能正确匹配....这就是我说的“在上述情况下,等号后面的值中,如果有‘>’的话....”

响应者 22:

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

响应者 23:

晕倒,没人理我

正则:/(?:<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>

响应者 24:

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

嘿嘿,俺是不是心黑了点?

响应者 25:

对于有转义的 \" \" 还是不行:

<textarea>

aa<b disabled > > </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>

响应者 26:

To zhangfmIT():

哈哈,不是不理你,是你的代码在我这边运行不了,总出错,所以我也没法试验了啊

而且,我主要是来问如何从

<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)">texttexttext</a>

里用正则表达式取出“texttexttext”的,呵呵

响应者 27:

sorry,偶也看错了

响应者 28:

对于有转义的 \" \" 还是不行:

-----------------------------------

恐怕这里不能用[^]这个来匹配了,觉得?!这种应该可以

响应者 29:

呵呵,加这个东西应该没有问题,只是我想试试不用非贪婪和预查,是否也能解决问题

响应者 30:

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也是小概率事件 :)

响应者 31:

在Dhtml中, " 和 \" 它们的长度都是一。也就是说,它们实际上是同一个东西。

比如:

var s1=‘"‘;

var s2=‘\"‘;

s1和s2是全相等的。

响应者 32:

是啊,现在的问题是meizz说的那个还行

<a href="..." onclick="if(this.href.length>30)alert(\"too big\")" name=asd>texttexttext</a>

响应者 33:

<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")",

所以对于一个正确的页面,是不太应该出现的。

响应者 34:

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\-:]什么意思

响应者 35:

<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)" name=as>d>texttexttext</a>

呵呵,怎么去告诉程序name是as>d还是as呢,规范的写的话属性不是都加引号吗,那就ok了~

响应者 36:

不管合不合了吧,也可以实现了,呵呵

<textarea>

aa<b disabled > > </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>

响应者 37:

上面很多的测试内容只是举个例子,有的地方有一些语法错误

[!\w\-:]是因为\w不能包含!、:、-字符

响应者 38:

都是强人,晕中~

响应者 39:

真是感谢大家的热心解答啊,哈哈,谢谢谢谢 !!!

响应者 40:

感谢强人。。。留影。收藏。。。。。。

响应者 41:

我用.NET是这么做的!

strCNLetter = Regex.Replace(strMyhtml,"<[^>]*>", "");

strCNLetter = Regex.Replace(strCNLetter,"\\s+", " ");//替换空格

响应者 42:

都跑首页上去了,mark下

响应者 43:

又有新突破,我在国外的网站上,找到了php中,strip_tags()函数所使用的正则表达式了,如下:

</?\w+((\s+\w+(\s*=\s*(?:".*?"|\‘.*?\‘|[^\‘">\s]+))?)+\s*|\s*)/?>

似乎比楼上几位大大的要简练一些,而且那此敏感字符都能够被正确处理。

此表达式,值得收藏!!!!

响应者 44:

╭═══╮╭═══╮╭══════╮

╰╮╭╯╰╮╭╯╰╮╭══╮╰╮

║║║║║║╰╮╰╮

║║║║║║║║

║║║║║║╭╯╭╯

║║║║║╰══╯╭╯

║║║║║╭═══╯

║║║║║║

╰╮╰╮╭╯╭╯║║

╰╮╰═╯╭╯╭╯╰╮

╰═══╯╰═══╯

响应者 45:

╭═══╮╭═══╮╭══════╮

╰╮╭╯╰╮╭╯╰╮╭══╮╰╮

║║║║║║╰╮╰╮

║║║║║║║║

║║║║║║╭╯╭╯

║║║║║╰══╯╭╯

║║║║║╭═══╯

║║║║║║

╰╮╰╮╭╯╭╯║║

╰╮╰═╯╭╯╭╯╰╮

╰═══╯╰═══╯

响应者 46:

看了一下你后来提供的这个正则,说实话还不如我的正确度高:

\".*?\" 匹配不了换行符的,所以没有 \"[^\"]*\" 好。

且我一直避免使用 ?: 这种预查功能是为了兼容 IE5.0

响应者 47:

引用

呵呵,加这个东西应该没有问题,只是我想试试不用非贪婪和预查,是否也能解决问题

-----------------------------------------------------------

上边这句应该是有含义的,我涉足程序的时间比较短,对版本方面的知识还要多学习,查了下资料,手头上没有低版本的机器,没办法测试,帖出来大家看看

非贪婪匹配 ie5.0以上(不含5.0)

预查 ie5.0以上(不含5.0)

replace()function返回不同的匹配值 5.5以上

响应者 48:

能否直接替换掉texttexttext?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。