在Javascript中的正则表达式删除链接

时间:2009-06-06 17:25:11

标签: javascript regex

我在JavaScript中有一个字符串,它包含a标记href。我想删除所有链接文本。我知道如何删除链接并保留内部文本,但我想完全删除链接。

例如:

var s = "check this out <a href='http://www.google.com'>Click me</a>. cool, huh?";

我想使用正则表达式,所以我留下了:

s = "check this out. cool, huh?";

6 个答案:

答案 0 :(得分:16)

这将删除<a/a>之间的所有内容:

mystr = "check this out <a href='http://www.google.com'>Click me</a>. cool, huh?";
alert(mystr.replace(/<a\b[^>]*>(.*?)<\/a>/i,""));

这不是真的万无一失,但也许它会为你的目的做到这一点......

答案 1 :(得分:12)

为了澄清,为了剥离链接标记并保持它们之间的所有内容不变,这是一个两步过程 - 删除开始标记,然后删除结束标记。

txt.replace(/<a\b[^>]*>/i,"").replace(/<\/a>/i, "");

工作样本:

<script>
 function stripLink(txt) {
    return txt.replace(/<a\b[^>]*>/i,"").replace(/<\/a>/i, "");
 }
</script>

<p id="strip">
 <a href="#">
  <em>Here's the text!</em>
 </a>
</p>

<p>
 <input value="Strip" type="button" onclick="alert(stripLink(document.getElementById('strip').innerHTML))">
</p>

答案 2 :(得分:3)

正则表达式在解析HTML方面根本不好(请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解原因)。你需要的是一个HTML解析器。有关使用各种解析器的示例,请参阅Can you provide an example of parsing HTML with your favorite parser?

答案 3 :(得分:1)

如果您只想删除<a>元素,则以下内容应该可以正常运行:

s.replace(/<a [^>]+>[^<]*<\/a>/, '');

这应该适用于您提供的示例,但它不适用于嵌套标记,例如它不适用于此HTML:

<a href="http://www.google.com"><em>Google</em></a>

答案 4 :(得分:1)

刚评论过John Resig's HTML parser。也许它会对你的问题有所帮助。

答案 5 :(得分:0)

上面的示例并不能消除所有出现的情况。这是我的解决方案:

str.replace(/<a\b[^>]*>/gm, '').replace(/<\/a>/gm, '')