0

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

我需要一个正则表达式来搜索 html 标记并将 - 替换为 _ 例如:

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

会成为

<TAG_NAME>-100</TAG_NAME>

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

任何人都可以帮忙吗?

谢谢。

4

2 回答 2

2

由于 JavaScript 是用于 DOM 操作语言,因此您通常应该考虑正确解析 XML 并使用 JavaScript 的 DOM 遍历函数而不是正则表达式。

下面是一些关于如何解析 XML 文档的示例代码,以便您可以使用 DOM 遍历函数。然后你可以遍历所有元素并更改它们的名称。这将自动排除文本节点、属性、评论和所有其他烦人的东西,你不想改变。

如果它必须是一个正则表达式,这里是一个临时的解决方案。请注意,如果您在属性名称或注释中有标签(甚至只有>),它会严重失败(实际上它也会将替换应用于注释):

str = str.replace(/-(?=[^<>]*>)/g, '_');

-如果它后面跟着 a>而没有遇到<之前,这将匹配 a 。这个概念被称为负前瞻g修饰符确保所有匹配项都被替换。

请注意,这会将替换应用于 . 前面的任何内容>。甚至属性值。如果您不希望这样,您还可以确保连字符和结尾之间有偶数个引号>,如下所示:

str = str.replace(/-(?=[^<>"]*(?:"[^<>"]*"[^<>"]*)*>)/g, '_');

不过,这仍会更改属性名称

这是一个正则表达式演示,显示了哪些有效,哪些无效。尤其是评论行为相当可怕。当然,这可以通过更复杂的正则表达式来解决,但我想你知道这是怎么回事吗?您真的应该使用 XML 解析器!

于 2012-11-20T14:41:15.767 回答
0
s/(\<[^\>]+\>)\-([^\<]+\<\/)/\1_\2/

虽然我不熟悉 JS 库,但我很确定会有更好的库来解析 HTML。

于 2012-11-20T14:35:31.723 回答