首先,我是stackoverflow的新手,所以如果我在错误的部分发布了这个,我很抱歉。
我需要一个正则表达式来搜索 html 标记并将 - 替换为 _ 例如:
<TAG-NAME>-100</TAG-NAME>
会成为
<TAG_NAME>-100</TAG_NAME>
请注意,标签内的值不受影响。
任何人都可以帮忙吗?
谢谢。
首先,我是stackoverflow的新手,所以如果我在错误的部分发布了这个,我很抱歉。
我需要一个正则表达式来搜索 html 标记并将 - 替换为 _ 例如:
<TAG-NAME>-100</TAG-NAME>
会成为
<TAG_NAME>-100</TAG_NAME>
请注意,标签内的值不受影响。
任何人都可以帮忙吗?
谢谢。
由于 JavaScript 是用于 DOM 操作的语言,因此您通常应该考虑正确解析 XML 并使用 JavaScript 的 DOM 遍历函数而不是正则表达式。
下面是一些关于如何解析 XML 文档的示例代码,以便您可以使用 DOM 遍历函数。然后你可以遍历所有元素并更改它们的名称。这将自动排除文本节点、属性、评论和所有其他烦人的东西,你不想改变。
如果它必须是一个正则表达式,这里是一个临时的解决方案。请注意,如果您在属性名称或注释中有标签(甚至只有>
),它会严重失败(实际上它也会将替换应用于注释):
str = str.replace(/-(?=[^<>]*>)/g, '_');
-
如果它后面跟着 a>
而没有遇到<
之前,这将匹配 a 。这个概念被称为负前瞻。g
修饰符确保所有匹配项都被替换。
请注意,这会将替换应用于 . 前面的任何内容>
。甚至属性值。如果您不希望这样,您还可以确保连字符和结尾之间有偶数个引号>
,如下所示:
str = str.replace(/-(?=[^<>"]*(?:"[^<>"]*"[^<>"]*)*>)/g, '_');
不过,这仍会更改属性名称。
这是一个正则表达式演示,显示了哪些有效,哪些无效。尤其是评论行为相当可怕。当然,这可以通过更复杂的正则表达式来解决,但我想你知道这是怎么回事吗?您真的应该使用 XML 解析器!
s/(\<[^\>]+\>)\-([^\<]+\<\/)/\1_\2/
虽然我不熟悉 JS 库,但我很确定会有更好的库来解析 HTML。