将HTML代码与javascript断开链接的正则表达式

regular expression to unlink html code with javascript

本文关键字:链接 正则表达式 断开 javascript HTML 代码      更新时间:2023-09-26

我很抱歉,我不敢相信这个问题在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; 

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

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

注意:

我们创建的元素不会被添加到实际的DOM中,因为我们没有将它添加到任何地方,它将保持不可见。下面是演示其工作原理的示例:

如前所述,不能用正则表达式解析HTML。主要原因是HTML元素嵌套和正则表达式不能处理这个问题。

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

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

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

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