О, чо написал.
/(?:<!--([\s\S]*?)-->)|(?:<!\[CDATA\[([\s\S]*?)\]\]>)|(?:<(\/)?([\w\-_]+)(?::([\w\-_]+))?((?:[\s]*[\w\-_]+(?::[^=]+)?="[^"]*")*)\s*(\/)?>)/gi В replace, например, попадут аргументы: result, isComment, isCDATA, isCloseTag, prefix, name, attributes, isEmptyTag, index Разбор attributes: /[\s]*([\w\-_]+)(?::([^=]+))?="([^"]*)"/gi Аргументы: result, prefix, name, data, index :D Хз, может кому и понадобиться.:write: |
сакс парсер пишешь? х)
|
Цитата:
Регулярки же у нас во всех языках перловые. Пусть останется на просторах интернета, т.к. я больше нигде не видел такого. |
<option selected> ? а такое попадает
|
Ах, да, забыл написать, что текст должен быть валидным xml. Нет, не попадает. Но при желании поправить можно.
|
Теперь любой сможет с лёгкостью найти эти бесценные строки в гугле по запросу "о, чо написал" :)
|
О, ещё чо написал: :write:
Теги: /(?:<!--([\s\S]*?)-->)|(?:<!\[CDATA\[([\s\S]*?)\]\]>)|(?:<\/\s*([a-z\-_]+)(?::([a-z\-_]+))?\s*>)|(?:<\s*([a-z\-_]+)(?::([a-z\-_]+))?((?:\s*[a-z\-_]+(?::[a-z\-_]+)?\s*(?:=\s*(?:(?:"[^"]*")|(?:'[^']*')))?)*)\s*(\/)?>)/gi Атрибуты: /(?:\s*([a-z\-_]+)(?::([a-z\-_]+))?\s*(?:=\s*(?:(?:"([^"]*)")|(?:'[^']*')))?)*/gi Это для HTML. Корректно отрабатывает, например, такой код: <nts:as asd asd:as=" ' asd:fake_attr " asd:as = ' " asd:fake_attr ' /> Вообще сказать, везде пишут что парсинг HTML-кода регулярками великое зло, в том числе на stack overflow и хабре. Может потому что не справились?... Если кто найдет ошибку - дайте знать :) |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Давай начнём с простого, проверка правильности расстановки скобок одного типа.
var str = '()((()())(())()(()))'; // например |
Да, кстати, предполагается, что решение будет только с регулярками, без всяких callback-функций.
|
Есть один недочет. Не найдет такой код:
<nts:as asd jhg=321 asd:as=" ' asd:fake_attr " asd:as = ' " asd:fake_attr ' /> Но его легко поправить, поэтому я оставлю эту задачу для вас :) Цитата:
string.replace(reg, function(){/* тут вся магия */}); Цитата:
|
Ну ты сказал, что регулярками определишь вложенность тегов, скобки те же теги.
Я не сразу понял, какая у тебя задача. Как я понимаю, это выловить во входном потоки все теги? Вложенность будет проверять какой-то другой механизм. |
Цитата:
Цитата:
|
А чем плох простой?
Код:
/<("[^"]*"|'[^']'|[^>])+>/ |
Цитата:
Цитата:
|
Пять простых регулярок лучше, чем одна сложная.
|
Цитата:
<!-- <div asdasas=""> --> Комментарии не должны обрабатываться. Ещё есть инлайновые скрипты, стили, так что... Пока ехал домой, мысленно нашел несколько багов, завтра исправлю. |
Исправил баги:
/(?:<!--([\s\S]*?)-->)|(?:<!\[CDATA\[([\s\S]*?)\]\]>)|(?:<\/[\s\n\r]*([a-z\-_]+)(?::([a-z\-_]+))?[\s\n\r]*>)|(?:<[\s\n\r]*([a-z\-_]+)(?::([a-z\-_]+))?((?:[\s\n\r]+[a-z\-_]+(?::[a-z\-_]+)?[\s\n\r]*(?:=[\s\n\r]*(?:(?:"[^"]*")|(?:'[^']*')|(?:([^\s]+))))?)*)[\s\n\r]*(\/)?>)/gi Сейчас всё должно быть тип топ. Только соответствующим образом нужно изменить регулярку по атрибутам. |
А где может использоваться вся эта писанина?
|
В программном коде.
|
=/ Я имел ввиду что ваш код делает?
|
Выше же писали - парсит XML валидную входящую строку и разбирает её на теги и атрибуты.
Если вы не знали, то сообщаю, что такие регулярки можно использовать не только в JS. |
Цитата:
Использовал в своем шаблонизаторе. |
Часовой пояс GMT +3, время: 21:49. |