使用javascript取消链接html代码的正则表达式

时间:2013-05-24 11:15:40

标签: javascript html regex

对不起,我不敢相信这个问题在stackoverflow中没有解决,但是我一直在搜索,我找不到任何解决方案。

我想用这种方式用正则表达式更改HTML代码:

testing <a href="url">anchor</a>

testing anchor

只有我想在不使用DOM函数的情况下取消链接文本代码,代码位于不在文档中的字符串中,我不想删除a个的其他标记。

4 个答案:

答案 0 :(得分:5)

如果你真的不想使用DOM函数(为什么?),你可能会这样做

str = str.replace(/<[^>]*>/g, '')

如果您确信自己没有更复杂的HTML,但在很多情况下会失败,例如某些嵌套标记或属性中的>,则可以使用它。您可以使用更复杂的正则表达式解决一些问题,但在一般情况下它们不适合此工作。

如果您不想删除a以外的其他标签,请执行以下操作:

str = str.replace(/<\/?a( [^>]*)?>/g, '')

此更改

<a>testing</a> <a href="url"><b>a</b>nchor</a><div>test</div><aaa>E</aaa>

testing <b>a</b>nchor<div>test</div><aaa>E</aaa>

答案 1 :(得分:4)

我知道你只想要正则表达式,对于未来的观众来说,这是一个使用DOM方法的简单解决方案。

var a = document.createElement("div");
a.innerHTML = 'testing <a href="url">anchor</a>';
var wordsOnly = a.textContent || a.innerText; 

在复杂的用例中,这不会失败,允许嵌套标签,并且非常清楚发生了什么:

  • 嘿浏览器!创建元素
  • 将HTML放入其中
  • 只给我回复文字,这就是我现在想要的。

注意:

我们创建的元素不会添加到实际的DOM中,因为我们不会在任何地方添加它,它将保持不可见。以下是a fiddle来说明其工作原理。

答案 2 :(得分:0)

如前所述,您无法使用正则表达式解析HTML。主要原因是HTML元素嵌套和正则表达式无法处理。

那就是说,我将提到一些限制,你可以做到以下几点:

string.replace (/(\b\w+\s*)<a\s+href="([^"]*)">(.*)<\/a>/g, '$1 $3')

这要求在标记之前有一个单词,单词和标记之间的间距是可选的,除了href标记中指定的<a>之外没有任何属性,并且您接受{之间的任何内容{1}}和。

答案 3 :(得分:0)

您可以从字符串创建DOM对象,使用DOM方法进行解析,而不必将所述DOM对象附加到文档