Сообщение от Tachyon
|
Задам еще один вопрос. Я правильно понимаю, что в регулярных выражениях JS отсутствует опережающая проверка, и из-за этого обработку тегов типа
<tag1 name='value'>string'"test<>continue</tag1>
с выбором строки не до символа, а до слова /<\s*\/\s*tag1\s*>/ регулярным выражением не сделать?
|
В принципе можно при определенных ограничениях, только регулярки охренительные будут. Вон для открывающего тега уже черт знает что пришлось нагородить
А тут много всяких кейсов добавляется: это и вложенные теги, и подстрока "</tag1>" в атрибуте постороннего тега, а если ещё комментарии <!-- --> добавятся, то всё, приехали. Так что в общем случае надо лепить что-то вроде конечного автомата на регулярках и честно обходить всю строку целиком.
Сообщение от Malleys
|
Можно так...
/<\s*tag1(?:\s*(?:[\w-]+)\s*(?:(=)\s*(?:'(?:\\\\|\\'|[^\\'])*'|"(?:\\\\|\\"|[^\\"])*"|[\w-]+))?)*\s*>/gi
|
Та же засада с бэктрекингом для строки `<tag1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`
Немного пофиксил, на этот раз вроде всё как надо
/<\s*tag1(?:\s+(?:[\w-]+(?![\w-])(?:\s*[:=]\s*(?:'(?:\\\\|\\'|[^\\'])*'|"(?:\\\\|\\"|[^\\"])*"|[\w-]+))?\s*)+)?\s*>/gi