【发布时间】:2013-08-29 14:18:52
【问题描述】:
我正在尝试编写一个正则表达式来搜索字符串并查找包含在大括号中的单词,这些单词未包含在具有特定属性(数据占位符)的 span 标签中。
示例文本:
This is a test. Testing <span class="anything">{variable}</span> wrapped without the attribute, but this one <span data-placeholder="val">{variable}</span> is. The first should match, the second should not, and the last one should as well {variable}
到目前为止,我想出的最好的是:
/[^>]{(.)*}[^>]/g
但这有一些问题。结束 } 之后可能有也可能没有文本,因此该模式与示例文本中的最后一个实例不匹配。它也不会匹配第一个实例,我不确定如何为正则表达式的第一部分编写“匹配除此单词之外的任何内容”。
目标是转换以下实例(注意任何东西都是文字):
{variable}
<span class="anything">{variable}</span>
到这个(或):
<span data-placeholder="">{variable}</span>
<span data-placeholder="" class="anything">{variable}</span>
不会中断任何已转换的现有实例。
谢谢!
编辑:使用 DOM 遍历和文本节点的正则表达式组合解决。谢谢@jonathan-m 和@frankiethekneeman!
【问题讨论】:
-
谷歌“负前瞻”
-
正则表达式解析html非常不可靠。最佳实践:不要这样做。而是使用 HTML 解析器,然后检查标签的内容。正则表达式对于内容是可靠的。
-
您真的应该诚实地使用带有 HTML 解析器的递归方法。不仅因为“以 cthulu 方式解析 HTML”,还因为它会使您的代码更具可扩展性,并且更易于维护。你在使用任何 Javascript 框架吗?这是服务器端代码,还是要在某个页面上执行?
-
您尝试查询的这些 HTML 文档是否有效?
-
如果您解决了它并认为您的解决方案可能对其他人有帮助,请将其作为答案发布。
标签: javascript regex