正则表达式更改html标记内的文本

时间:2012-11-20 14:20:24

标签: javascript html regex replace tags

首先,我是stackoverflow的新手,所以如果我把它发布在错误的部分,我很抱歉。

我需要一个正则表达式来搜索html标签并用_替换 - e.g:

<TAG-NAME>-100</TAG-NAME>

会变成

<TAG_NAME>-100</TAG_NAME>

请注意,标记内的值不受影响。

有人可以帮忙吗?

感谢。

2 个答案:

答案 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。