Regex, чтобы поставить кавычки для атрибутов HTML - PullRequest
1 голос
/ 08 июля 2011

У меня есть такой сценарий

в тегах html, если атрибуты не заключены ни в одинарные, ни в двойные кавычки. Я хочу поставить для этого двойные кавычки

как написатьрегулярное выражение для этого?

Ответы [ 2 ]

3 голосов
/ 08 июля 2011

Если вы повторяете это регулярное выражение столько раз, сколько может быть тегов в элементе, это должно работать, пока текст является нормальным и не содержит много специальных символов, которые могут давать ложные срабатывания.

"<a href=www.google.com title = link >".replace(/(<[^>]+?=)([^"'\s][^\s>]+)/g,"$1'$2'")

Regex говорит: открытый тег (<), за которым следуют один или несколько не закрывающих тегов ([^>]+), неуклюже (?), за которыми следуют равные (=), все захваченные как первая группа ((...)), а затем вторая группа ((...)) захватывает не одиночную или двойную кавычку или пробел ([^"'\s]), за которым следует не пробел или закрывающий тег ([^\s>]) один или несколько раз (+), а затем замените его напервая захваченная группа ($1), за которой следует вторая захваченная группа в одинарных кавычках ('$2')

Например, с циклом:

html = "<a href=www.google.com another=something title = link >";
newhtml = null;
while(html != newhtml){
   if(newhtml)
        html = newhtml;
   var newhtml = html.replace(/(<[^>]+?=)([^"'\s][^\s>]+)/,"$1'$2'");
}
alert(html);

Но это плохой путьтвоя проблема.Для анализа лучше использовать анализатор HTML, а затем переформатировать HTML так, как вы этого хотите.Это обеспечило бы хорошо отформатированный HTML, тогда как регулярные выражения могли бы обеспечить хорошо отформатированный HTML, только если входные данные точно соответствуют ожидаемым.

1 голос
/ 21 октября 2011

Очень полезно! Я сделал небольшое изменение, чтобы оно соответствовало атрибутам с одним символьным значением: /(<[^>]+?=)([^"'\s>][^\s>]*)/g (изменил один или несколько + на ноль или более * и добавил > к первому совпадению во второй группе).

...