Я читаю информацию из форматированной строки. формат выглядит следующим образом:regex для синтаксического анализа строки с экранированными символами
"foo:bar:beer:123::lol"
Все между «:» есть данные, которые я хочу, чтобы извлечь с регулярным выражением. Если a: за ним следует другое: (например, «::») данные для этого должны быть «» (пустая строка).
В настоящее время я разборе его с этим регулярным выражением:
(.*?)(:|$)
Теперь пришла мне в голову, что «:» может существовать в данных, а также. Поэтому его нужно избегать. Пример:
"foo:bar:beer:\::1337"
Как я могу изменить свое регулярное выражение, так что он соответствует «\:» как данные, тоже?
Редактировать: Я использую JavaScript как язык программирования. Кажется, у него есть некоторые ограничения в отношении сложных выражений регулята. Решение должно работать и на JavaScript.
Спасибо, Макфарлейн
Я получаю этот вывод: ["foo", "", "bar", "", "beer", "", "\" "," "," "," 1337 "," "] – McFarlane
Ah , правильно. RegexBuddy достаточно «умный», чтобы опустить посторонние пустые совпадения, JavaScript и Python (где я сейчас тестирую это). Посмотрим, смогу ли я найти решение. –
ваш обновленный пример соответствует данным, как ожидалось, но он продолжает возвращать ["", ""]. В вашем примере цикл приведет к бесконечному циклу, потому что совпадение никогда не будет равным нулю. Я ограничил цикл while, чтобы выполнить [subject.match (myregexp) .length-1] итерации. Я буду отмечать ваш ответ как правильный, хотя, потому что регулярное выражение является удивительным. Большое спасибо за ваши усилия. – McFarlane