1

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

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

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

testing anchor

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

4

4 回答 4

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>
于 2013-05-24T11:18:17.050 回答
4

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

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

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

  • 嘿浏览器!创建一个元素
  • 把那个HTML放进去
  • 把文字还给我,这就是我现在想要的。

笔记:

我们正在创建的元素不会被添加到实际的 DOM 中,因为我们没有在任何地方添加它,它会保持不可见。这是一个小提琴来说明这是如何工作的。

于 2013-05-24T11:22:37.790 回答
0

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

也就是说,我将提到一些限制,您可以执行以下操作:

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

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

于 2013-05-24T11:29:23.530 回答
0

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

于 2013-05-24T12:07:33.790 回答