Если вы повторяете это регулярное выражение столько раз, сколько может быть тегов в элементе, это должно работать, пока текст является нормальным и не содержит много специальных символов, которые могут давать ложные срабатывания.
"<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, только если входные данные точно соответствуют ожидаемым.