2012-06-23 2 views
1

Я хотел бы преобразовать строку, содержащую теги HTML, чтобы все теги и свойства были в верхнем регистре (предпочтительно с использованием регулярных выражений).AS3 регулярные выражения make html tags uppercase

Например, следующая строка:

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

должен быть изменен на

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

Возможно ли это с помощью одной строки заменить регулярное выражение? Если да, то как?

ответ

0

Честно говоря, я не эксперт AS3. Однако обходным могут быть следующие:

  1. Найти все HTML-теги через регулярное выражение, как это: <[^>]+>
  2. Заменять все HTML-теги нашли с их верхней версии случае (при использовании toUpperCase() способ).
+0

я thoght что-то в этом роде, но как применить «toUpperCase» только maches регулярного выражения? а также это изменит значения свойств тега и в верхнем регистре. например, он изменил бы на istead Mat

+0

Для каждого тега, возвращаемого вашим регулярным выражением: 1: угловые скобки полосы ' > '. Получите текст текста тега в приложении. 2: Используйте метод split (/ \ s + /) ': получите имя тега и запишите его. 3: для каждого атрибута = значение разделите его на 'split (/ = /)' и получите имена атрибутов. Пропустите их. 4. Сконцентрируйте полученную строку. '' <'' + 'upperCaseTagName' +' attributeUppercase' = 'attributeValue' * +'> ' 5. Замените старую строку на новую. – user278064

3

Изменение имен тегов элемента HTML в верхнем регистре довольно просто. Используйте функцию обратного вызова версии строки заменить метод следующим образом:

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;}); 
} 
Смежные вопросы