对不起,我不敢相信这个问题在stackoverflow中没有解决,但是我一直在搜索,我找不到任何解决方案。
我想用这种方式用正则表达式更改HTML代码:
testing <a href="url">anchor</a>
到
testing anchor
只有我想在不使用DOM函数的情况下取消链接文本代码,代码位于不在文档中的字符串中,我不想删除a
个的其他标记。
答案 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;
在复杂的用例中,这不会失败,允许嵌套标签,并且非常清楚发生了什么:
我们创建的元素不会添加到实际的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对象附加到文档