正则表达式以取消html代码与javascript的链接

正则表达式以取消html代码与javascript的链接,javascript,html,regex,Javascript,Html,Regex,很抱歉,我不敢相信这个问题在stackoverflow中没有得到解决,但我已经搜索了很多次,没有找到任何解决方案 我希望通过以下方式更改带有正则表达式的HTML代码: testing <a href="url">anchor</a> 只有我想在不使用DOM函数的情况下取消文本代码的链接,代码是一个字符串,不在文档中,而且我不想删除其他与a相关的标记。如果你真的不想使用DOM函数,为什么?你可以 str = str.replace(/<[^>]*>/g,

很抱歉,我不敢相信这个问题在stackoverflow中没有得到解决,但我已经搜索了很多次,没有找到任何解决方案

我希望通过以下方式更改带有正则表达式的HTML代码:

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

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

如果你真的不想使用DOM函数,为什么?你可以

str = str.replace(/<[^>]*>/g, '')
这就改变了

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


如果你真的不想使用DOM函数,为什么?你可以

str = str.replace(/<[^>]*>/g, '')
这就改变了

<a>testing</a> <a href="url"><b>a</b>nchor</a><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中,因为我们不会在任何地方添加它,它将保持不可见。以下是如何工作的说明。

我知道您只需要正则表达式,对于未来的观众,这里是一个使用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')

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

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

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

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


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

您可以从字符串创建DOM对象,使用DOM方法进行解析,如果没有将所述DOM对象附加到文档中

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

这是无法解决的原因…另外,仅仅因为HTML不在DOM中并不意味着你不能解析它。HTML代码是一个字符串,它在窗口中不可见,我只想用正则表达式解析。对。将HTML放在字符串中并不会阻止您使用DOM方法。这是一个无法解决的原因…而且,仅仅因为HTML不在DOM中并不意味着您无法解析它。HTML代码放在字符串中,它在窗口中不可见,我只想用正则表达式解析。对。将HTML放在字符串中并不会阻止您使用DOM方法。+1对于OP的简单用例非常有效,我认为这是最简单的正则表达式解决方案。哦,如果你要做更复杂的事情,请避免这个。非常感谢,这就是我所需要的,我一定要学习一些正则表达式教程,我对此一无所知。尽管嵌套标记失败,但这已经足够了。我想我不能使用DOM函数,因为代码是一个字符串,它没有显示在文档对象中。@user1901219这个正则表达式清楚吗,或者你想让我解释一下吗?现在我想,它不起作用,因为我只想删除链接标记,如果我有我想要的结果,你可以从字符串创建一个DOM对象,使用DOM方法进行解析,而无需将所述DOM对象附加到文档中。+1非常适合OP的简单用例,我认为这是最简单的正则表达式解决方案。哦,如果你要做更复杂的事情,请避免这个。非常感谢,这就是我所需要的,我一定要学习一些正则表达式教程,我对此一无所知。尽管嵌套标记失败,但这已经足够了。我想我不能使用DOM函数,因为代码是一个字符串,它没有显示在文档对象中。@user1901219这个正则表达式清楚吗,或者你想让我解释一下吗?现在我想,它不起作用,因为我只想删除链接标记,如果我有我想要的结果,你可以从字符串创建一个DOM对象,使用DOM方法进行解析,而不必将所述DOM对象附加到文档中。请注意,未来的读者,如果您是nodejs或Another,也可以这样做

r javascript框架。大多数时候不需要重新发明轮子。+1因为即使它不是OP所要求的,它通常也是一个更好的解决方案。对于与IE8的兼容性,比如a.textContent | | a.innerText,这不应该更复杂一点吗?如果我想保留粗体内容,但只是删除链接呢?i、 把foo bar blep awoo变成foo bar baz blep awoo?这消除了其中的所有HTML,使foo-bar-baz-blep-awoo返回。我不会说这是一个复杂的用例,也不会说它允许嵌套标记。@QPaysTaxes仍然很简单,您只需对其执行QuerySelector all'a'操作,然后对元素调用。remove。@BenjaminGruenbaum说。。。据我所知,也不起作用。我想你的意思是类似于[].forEacha.queryselectoral'a',functionl{a.removel;};如果这是错误的,请澄清。请注意未来的读者,如果您是nodejs或其他javascript框架,这也是可能的。大多数时候不需要重新发明轮子。+1因为即使它不是OP所要求的,它通常也是一个更好的解决方案。对于与IE8的兼容性,比如a.textContent | | a.innerText,这不应该更复杂一点吗?如果我想保留粗体内容,但只是删除链接呢?i、 把foo bar blep awoo变成foo bar baz blep awoo?这消除了其中的所有HTML,使foo-bar-baz-blep-awoo返回。我不会说这是一个复杂的用例,也不会说它允许嵌套标记。@QPaysTaxes仍然很简单,您只需对其执行QuerySelector all'a'操作,然后对元素调用。remove。@BenjaminGruenbaum说。。。据我所知,也不起作用。我想你的意思是类似于[].forEacha.queryselectoral'a',functionl{a.removel;};如果这是不正确的,请澄清。这给了我测试的网址,而不是测试锚像OP问我坏,现在修复。感谢BenjaminIt没有为我的简单代码工作,我不知道我是否理解好这要求在标记之前有一个单词,我以前用过一个单词。但无论如何,@dystroy的表达对我来说已经足够了。非常感谢。这让我可以测试url,而不是像OP那样测试锚。我的问题很糟糕,现在已经解决了。感谢BenjaminIt没有为我的简单代码工作,我不知道我是否理解好这要求在标记之前有一个单词,我以前用过一个单词。但无论如何,@dystroy的表达对我来说已经足够了。非常感谢。嘿,安迪,你的意思是把它作为一个评论而不是一个答案吗?是的,这是真的,但我认为用正则表达式做它更快更优雅,但现在我看到了Mat的答案,也许我错了。嘿,安迪,你的意思是把它作为一个评论而不是答案吗?是的,这是真的,但是我认为用正则表达式来做会更快更优雅,但是现在我看到了Mat的答案,也许我错了。