首先,我是stackoverflow的新手,所以如果我把它发布在错误的部分,我很抱歉。
我需要一个正则表达式来搜索html标签并用_替换 - e.g:
<TAG-NAME>-100</TAG-NAME>
会变成
<TAG_NAME>-100</TAG_NAME>
请注意,标记内的值不受影响。
有人可以帮忙吗?
感谢。
答案 0 :(得分:2)
由于JavaScript是DOM操作的 语言,因此通常应该考虑正确解析XML并使用JavaScript的DOM遍历函数而不是正则表达式。
Here is some example code on how to parse an XML document以便您可以使用DOM遍历功能。然后,您可以遍历所有元素并更改其名称。这将自动排除文本节点,属性,注释和所有其他恼人的事情,你不想改变。
如果 是正则表达式,这是一个临时解决方案。请注意,如果您在属性名称或注释中包含标记(甚至只有>
),那么它将严重失败(实际上它也会将替换应用于注释):
str = str.replace(/-(?=[^<>]*>)/g, '_');
如果-
后面跟>
之前没有遇到<
,则会匹配g
。该概念称为negative lookahead。 >
修饰符可确保替换所有匹配项。
请注意,这会将替换应用于>
前面的任何内容。甚至是属性值。如果你不想要,你也可以确保连字符和结束str = str.replace(/-(?=[^<>"]*(?:"[^<>"]*"[^<>"]*)*>)/g, '_');
之间有偶数引号,如下所示:
{{1}}
但仍会更改属性名称。
Here is a regexpal demo that shows what works and what doesn't work.特别是评论行为非常可怕。当然,这可以通过更复杂的正则表达式来处理,但我猜你看到这是怎么回事?你应该真的,真的使用XML解析器!
答案 1 :(得分:0)
s/(\<[^\>]+\>)\-([^\<]+\<\/)/\1_\2/
虽然我不熟悉JS库,但我很确定会有更好的库来解析HTML。