使用javascript正则表达式将XML标记转换为大写

时间:2012-05-31 11:22:18

标签: javascript regex

我正在尝试将XML标记转换为大写,同时保留属性和文本的大小写。例如,

<Mytag Category="Parent">Value1</Mytag>

变为

<MYTAG Category="Parent">Value1</MYTAG>

我有一个正确匹配XML标记的正则表达式,但是upperCase函数似乎没有工作。

myXmlElement.replace(/<(\/)*([a-zA-Z_0-9]+)([^>]*)>/g,"<$1" + "$2".toUpperCase() + "$3>")

我也尝试使用String.prototype.toUpperCase.apply("$2"),并将函数作为替换参数传递

myXmlElement.replace(/<[\/]*([a-zA-Z_0-9]+)[^>]*>/g,
                    function($1,$2,$3){return <$1 + $2.toUpperCase() + $3>})

但这不起作用,因为$ 1,$ 2,$ 3似乎是指整个匹配元素($ 1 =,$ 2 =)

我确信我在这里可以忽略一些微不足道的事情,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

如果您想匹配标记名称前后的字符,则需要将其放入模式中的匹配大括号中:

var pattern = /<([\/]*)([a-zA-Z_0-9]+)([^>]*)>/g 
var newTag = myElement.replace(pattern, function(full, before, tag, after) { 
  return "<" before + tag.toUpperCase() + after + ">"
})

替换函数将full匹配表达式作为第一个参数。这就是为什么你可能会忽略它。 之后,您的模式的任何匹配括号将作为参数传递。