我想转换包含HTML标记的字符串,以便所有标记和属性都是大写的(最好使用正则表达式)。
例如,以下字符串:
'<bla>something <br/><a href="foo">bar</a></bla>'
应改为
'<BLA>something <BR/><A HREF="foo">bar</A></BLA>'
这是否可以使用单个字符串替换正则表达式?如果是这样,怎么样?
答案 0 :(得分:3)
将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;});
}
答案 1 :(得分:0)
老实说,我不是AS3的专家。但是解决方法可能如下:
<[^>]+>
toUpperCase()
方法)。