Javascript 正则表达式有条件地剥离HTML标记内容

Javascript 正则表达式有条件地剥离HTML标记内容,javascript,regex,Javascript,Regex,我需要将这个字符串剥离成-但是这个正则表达式\s+\w+[^href]=\s*\w?不会在结束时停止,而是运行到的末尾-有人能帮助我让这个正则表达式在结束时停止吗 谢谢 如果你真的想使用正则表达式,我的建议是用另一种方法。将href和链接文本提取到组,然后再次生成标记 href="([^"]+)"[^>]*>([^<]+)<\/a> href=“([^”]+)“[^>]*>([^通过放置\w+[^href]您仍然允许类似的内容,除非您的正则表达式格式不正确,并且您

我需要将这个字符串
剥离成
-但是这个正则表达式
\s+\w+[^href]=\s*\w?
不会在结束时停止
,而是运行到
的末尾-有人能帮助我让这个正则表达式在结束时停止吗


谢谢

如果你真的想使用正则表达式,我的建议是用另一种方法。将href和链接文本提取到组,然后再次生成标记

href="([^"]+)"[^>]*>([^<]+)<\/a>

href=“([^”]+)“[^>]*>([^通过放置
\w+[^href]
您仍然允许类似
的内容,除非您的正则表达式格式不正确,并且您已经(例如)
不要尝试使用正则表达式来清理HTML。您很可能会以不安全的方式出错

可能有DOM解决方案可以解决您的问题,如果没有,也有一些库已经过彻底的测试,并经过了以编写解析器为生的人的审查


无耻的插件:

您是在处理HTML还是DOM元素

更容易处理元素。如果您希望元素只有一个href属性,那么为什么不使用类似于:

function fixLink(el) {
  var newLink = document.createElement('a');
  newLink.href = el.href;
  newLink.appendChild(document.createTextNode(el.textContent || el.innerText));
  el.parentNode.replaceChild(newLink, el);
}

即使处理HTML,也可以将其插入新元素(例如div),执行上述操作,然后获取剩余的innerHTML。

正则表达式在很多方面都是错误的,例如,
[^href]
意味着“匹配除h、r、e或f以外的任何字符”。该代码将运行的上下文是什么?(因为如果要提取页面上已经存在的元素,有更简单的方法进行提取。)你可能需要。@ghoti你只是不想-对于一般的东西。但是对于像这样的简单的东西,你当然想使用正则表达式。这就是htey的用途。别再做一个不思考的鹦鹉了。仅仅因为你可能无法理解它,并不意味着你应该通过假装别人无法理解来侮辱别人的智慧ut也是。我使用regexps解析html,但我仍然认为链接很有趣。这会让我成为坏人吗?Regex选择整个字符串是出于某种原因-当我需要做的是除去
a
标记中的所有内容,除了
href
并呈现该字符串时。+1显然,向下的投票人没有足够的r答案是很好的建议。你为什么要用JS清理HTML?如果需要,为什么不在服务器端进行清理?@Mark,如果你从Web服务调用中获得HTML,但不信任服务在你的域中运行代码,那么你必须自己清理。你可以通过在客户端进行清理来避免延迟。这是一个很好的方法国王真棒-除了我刚刚发现的一个场景。有一个链接看起来像这样
,出于某种原因
(事件)
不匹配。我尝试将
\w+
更改为
*
,但这会选择所有内容。Regex,你为什么恨我?Regex不恨你,你只需要了解贪婪和非贪婪。
*
尽可能匹配(因此会一直到最后一个
)。要使其不贪婪,即尽可能少地匹配,请尝试
*?
。或者,您可以只做
[\w()]+
以允许
\w
和括号。(请记住
\w
[a-zA-Z0-9.
(大致上,不确定区域设置和重音字母)。@mathematical.coffee,通过放置()在那里-它正是我现在需要它做的,非常感谢!!我想探索一下。我正在解析注释字段中的链接,并且注释最初以HTML显示给用户,但是当用户想要编辑该注释时,我需要将其转换为文本并去掉一些我添加到应用程序中的装饰。使用记住,有没有更好的方法来处理DOM呢?
function fixLink(el) {
  var newLink = document.createElement('a');
  newLink.href = el.href;
  newLink.appendChild(document.createTextNode(el.textContent || el.innerText));
  el.parentNode.replaceChild(newLink, el);
}