对不起,我不敢相信这个问题在 stackoverflow 中没有解决,但我一直在搜索,但没有找到任何解决方案。
我想以这种方式使用正则表达式更改 HTML 代码:
testing <a href="url">anchor</a>
至
testing anchor
只有我想在不使用 DOM 函数的情况下取消链接文本代码,代码位于不在文档中的字符串中,我不想删除其他标签a
。
对不起,我不敢相信这个问题在 stackoverflow 中没有解决,但我一直在搜索,但没有找到任何解决方案。
我想以这种方式使用正则表达式更改 HTML 代码:
testing <a href="url">anchor</a>
至
testing anchor
只有我想在不使用 DOM 函数的情况下取消链接文本代码,代码位于不在文档中的字符串中,我不想删除其他标签a
。
如果你真的不想使用 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>
我知道你只想要正则表达式,对于未来的观众来说,这是一个使用 DOM 方法的简单解决方案。
var a = document.createElement("div");
a.innerHTML = 'testing <a href="url">anchor</a>';
var wordsOnly = a.textContent || a.innerText;
这在复杂的用例中不会失败,允许嵌套标签,并且非常清楚发生了什么:
我们正在创建的元素不会被添加到实际的 DOM 中,因为我们没有在任何地方添加它,它会保持不可见。这是一个小提琴来说明这是如何工作的。
如前所述,您不能使用正则表达式解析 HTML。主要原因是 HTML 元素嵌套和正则表达式无法处理。
也就是说,我将提到一些限制,您可以执行以下操作:
string.replace (/(\b\w+\s*)<a\s+href="([^"]*)">(.*)<\/a>/g, '$1 $3')
这要求标签之前有一个单词,单词和标签之间的间距是可选的,除了标签中href
指定的属性之外没有其他属性,<a>
并且您接受<a>
和 之间的任何内容。
您可以从字符串创建一个 DOM 对象,使用 DOM 方法进行解析,而无需将所述 DOM 对象附加到文档中