javascript - 在引号之间匹配 HTML 打开标签

标签 javascript html regex

我有下面的小 html 代码:

<span class="k">function</span> () { <span class="k">this</span>.test = '<p><span>test</span></p>'; }

和这个正则表达式:

/["|'](<)|(<)(?:\/[^>]>)["|']/g

使用这个正则表达式,它返回两个匹配的结果,但我想要的是匹配引号之间的所有 html 开放标记并将它们分组为一个结果。这样做的正确正则表达式是什么? 之后我需要用 < 替换那些打开的标签。 提前致谢!

最佳答案

您有“损坏”的 HTML,在带引号的字符串中包含 HTML 标记。这将无法使用 HTML 解析器解析字符串,正如一些评论者所建议的那样——他们原则上是正确的,但在这种情况下不起作用。

这个 HTML 片段来自哪里?最好的替代方法是在工作流程的较早阶段对引号内的 HTML 进行转义,这样您就不必编写难看的正则表达式来尝试解开它。

如果您真的想使用正则表达式来执行此操作,则不需要一些可笑的毛茸茸的正则表达式。这样做就足够了:

str.replace(/'(.*?)'/g, function(_, match) { return esc(match); })

esc怎么写?好吧,大多数图书馆都有这样做的东西。或者你可以自己写,正如另一个答案所建议的那样。下面是一个解决方案,它使用浏览器的内置功能来处理此类事情:

function esc(str) {
  var e = document.createElement('div');
  e.textContent = str;
  return e.innerHTML;
}

这给你:

>> var x = '<span class="k">function</span> () { <span class="k">this</span>.test = \'<p><span>test</span></p>\'; }'
>> x.replace(/'(.*?)'/g, function(_, match) { return esc(match); })
<< "<span class="k">function</span> () { <span class="k">this</span>.test = &lt;p&gt;&lt;span&gt;test&lt;/span&gt;&lt;/p&gt;; }"

关于javascript - 在引号之间匹配 HTML 打开标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29792136/

相关文章:

css - 如何在内联 block 内垂直居中 float div?

html - 并排对齐两个元素并强制它们保持水平

html - 响应式导航不工作,丢失了我的 CSS 概览

Java正则表达式检查字符串是否是有效的数字格式(逗号和小数点放置)

regex - Perl regexp - 检索要列出的所有匹配项并将其从文本中删除

javascript - 如何将 iframe 内的页面重定向到另一个页面,但我们必须留在 iframe 中

javascript - jquery-ui 工具提示功能中的选项对工具提示没有任何影响

css - 我怎样才能只选择基于两个字符串的 CSS 类,这两个字符串之间有一个字符串?

javascript - 拦截iframe消息嵌套iframe,跨域

javascript - 如何使用 Firebase 和 JavaScript 将快照保存在数组中?