0

我正在尝试将 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 = )

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

4

1 回答 1

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匹配表达式作为第一个参数。这就是为什么你可以忽略它。之后,您的模式的任何匹配大括号都将作为参数传递。

于 2012-05-31T11:45:37.143 回答