正则表达式来改变HTML标记内的文本
首先我是新来的stackoverflow,所以我很抱歉,如果我发布在错误的部分。正则表达式来改变HTML标记内的文本
我需要一个正则表达式的HTML标签中搜索并替换 - 用_ 例如:
<TAG-NAME>-100</TAG-NAME>
将成为
<TAG_NAME>-100</TAG_NAME>
需要注意的是,在标签内的值不影响。
任何人都可以帮忙吗?
谢谢。
由于JavaScript是的语言DOM操作,你通常应该考虑适当地解析XML和使用,而不是正则表达式JavaScript的DOM遍历功能。
Here is some example code on how to parse an XML document这样就可以使用DOM遍历函数。然后,您可以遍历所有元素并更改其名称。这将自动排除文本节点,属性,评论和所有其他恼人的事情,你不想改变。
如果它有是一个正则表达式,这里是一个临时解决方案。请注意,这将严重失败,您是否有属性名称或注释标签内(甚至只有>
)(事实上,它也将适用于更换,以评论):
str = str.replace(/-(?=[^<>]*>)/g, '_');
这将与-
如果是之后是>
,之前未遇到<
。这个概念被称为negative lookahead。 g
修饰符确保所有的事件都被替换。
请注意,这将替换为>
前面的任何内容。即使属性值。如果你不想,你也可以确保有偶数连字符和结束>
,这样之间的报价:
str = str.replace(/-(?=[^<>"]*(?:"[^<>"]*"[^<>"]*)*>)/g, '_');
这仍然会改变属性名虽然。
Here is a regexpal demo that shows what works and what doesn't work.特别是评论行为是相当可怕的。当然,这可以用一个更复杂的正则表达式来处理,但是我想你会看到这是怎么回事?你真的应该,真的使用XML解析器!
非常感谢,这正是我想要的。 – user1839059
s/(\<[^\>]+\>)\-([^\<]+\<\/)/\1_\2/
虽然我不熟悉JS库,但我很肯定会有更好的库来解析HTML。
不是真的JS,是吗? ;) –
@ m.buettner否:(但它是一个普通的正则表达式,所以JS应该有类似的东西? – texasbruce
是的,你的正则表达式的问题是,它必须多次运行('g'修饰符不会帮助)因为匹配不能重叠,所以只有一个'-'会被替换 –
欢迎使用stackoverflow!你能向我们展示你自己的尝试吗?你使用哪种语言或工具?最后强制性的...... [你不应该使用正则表达式来解析HTML](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) –
那么我正在使用别的东西来解析一些xmls。这不是一个真正的html标签,但我认为这会让东西变得更容易理解。我尝试过,如果不同的reg表达式并在regexpal上测试它们,但没有帮助,或者我得到-100,或者我也得到标记的文本... – user1839059
@ user1839059正则表达式aren'对于XML比HTML更好)。既然你使用正则表达式,我假设你使用JavaScript? –