1

我想转换一个包含 HTML 标签的字符串,以便所有标签和属性都为大写(最好使用正则表达式)。

例如,以下字符串:

'<bla>something <br/><a href="foo">bar</a></bla>'

应该改为

'<BLA>something <BR/><A HREF="foo">bar</A></BLA>'

这可以使用正则表达式替换单个字符串吗?如果是这样,怎么做?

4

2 回答 2

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;});
}
于 2012-06-23T15:23:52.840 回答
0

老实说,我不是AS3的专家。但是,解决方法可能如下:

  1. 通过这样的正则表达式查找所有 html 标签:<[^>]+>
  2. 将找到的所有html 标签替换为其大写版本(通过使用toUpperCase()方法)。
于 2012-06-23T14:04:13.727 回答