我想转换一个包含 HTML 标签的字符串,以便所有标签和属性都为大写(最好使用正则表达式)。
例如,以下字符串:
'<bla>something <br/><a href="foo">bar</a></bla>'
应该改为
'<BLA>something <BR/><A HREF="foo">bar</A></BLA>'
这可以使用正则表达式替换单个字符串吗?如果是这样,怎么做?
我想转换一个包含 HTML 标签的字符串,以便所有标签和属性都为大写(最好使用正则表达式)。
例如,以下字符串:
'<bla>something <br/><a href="foo">bar</a></bla>'
应该改为
'<BLA>something <BR/><A HREF="foo">bar</A></BLA>'
这可以使用正则表达式替换单个字符串吗?如果是这样,怎么做?
仅将 HTML 元素标记名称更改为大写非常容易。使用 String 替换方法的回调函数版本,如下所示:
function HtmlTagName2Upper(text) {
return text.replace(/(<\/?\w+\b)([^<>]*>)/g,
function(m0, m1, m2) {
return m1.toUpperCase() + m2;});
}
上面的正则表达式捕获标签名称$1
和所有属性(如果有的话)$2
。上面的正则表达式可以很好地工作,但不处理带有尖括号的属性值,也不大写属性名称。
处理在其属性值中具有尖括号的 HTML 元素并将元素属性名称设为大写有点复杂:
function HtmlTagAndAttributeNames2Upper(text) {
return text.replace(/(<\/?\w+\b)((?:[^<>'"]+|"[^"]*"|'[^']*')*>)/g,
function(mo0, mo1, mo2) {
mo2 = mo2.replace(/(\s+[\w\-.:]+)((?:\s*=\s*(?:"[^"]*"|'[^']*'|[\w\-.:]+))?)/g,
function(mi0, mi1, mi2) {
return mi1.toUpperCase() + mi2});
return mo1.toUpperCase() + mo2;});
}
老实说,我不是AS3的专家。但是,解决方法可能如下:
<[^>]+>
toUpperCase()
方法)。