我正在尝试将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 =)
我确信我在这里可以忽略一些微不足道的事情,有人可以帮忙吗?
答案 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
匹配表达式作为第一个参数。这就是为什么你可能会忽略它。
之后,您的模式的任何匹配括号将作为参数传递。