#javascript #regex
#javascript #регулярное выражение
Вопрос:
У меня есть текст, аналогичный шаблону:
new{test}anotherone{test{nest}}new1{test1}new2{test2}
Я новичок в регулярных выражениях и пытаюсь создать шаблон, который соответствует группам таким образом, чтобы для каждого совпадения:
Группа 1: новая
Группа 2: тест
У меня это работает с ([S][a-z#-()->] ){([^? ]*?)}
использованием JavaScript
Однако я хочу игнорировать блок с вложенностью, так что anotherone{test{nest}}
он игнорируется при сопоставлении. Вот моя попытка с регулярным выражением101
Заранее спасибо!
Обновление: строка также может быть вложена во вложенную часть, например
new{test}ignore_this{test1{test1}{test2{test2}}new{test}new{test}
Таким образом, он должен соответствовать только: Group1: new / Group2: test
Комментарии:
1. Попробуйте
b(?<![{}])(w ){([^{}]*)}
, посмотрите демонстрацию .2.Вы также можете получить 2 совпадения в конце, используя отрицательный прогноз в конце
([^s{}] ){([^{}]*)}(?!})
regex101.com/r/CSrZWq/1
Ответ №1:
Вы можете попробовать это регулярное выражение для сопоставления каждой пары new
и test
(3 пары в вашем вводе):
(?<!{)b([^{}] ){([^{}]*)}(?![^{}]*})
Обновленная демонстрация регулярных выражений
Подробности регулярного выражения:
(?<!{)
: Убедитесь, что у нас нет{
в предыдущей позицииb
: Граница слова([^{}] )
: Сопоставить 1 любого символа, который не{
является и}
в группе #1{
: Сопоставить{
([^{}]*)
: Сопоставление 0 любого символа, который не{
является и}
в группе #2}
: Сопоставить}
(?![^{}]*})
: Отрицательный прогноз, чтобы утверждать, что у нас нет закрытия}
впереди без каких-либо{
и}
между ними
Комментарии:
1. Спасибо! Что, если строка имеет вложенность внутри нее? Например,
new{test}ignore_this{test1{test1}{test2{test2}}new{test}new{test}
и я хочу игнорировать всеignore_this{test1{test1}{test2{test2}}
? Я могу обновить вопрос, чтобы отразить этот крайний случай 🙂2. @o1n3n21: У вас была возможность попробовать мой обновленный ответ? Также не понимаю причины снижения здесь.
3. Спасибо, я только что принял ответ и не проголосовал против, не зная, откуда это взялось. Еще раз спасибо за вашу помощь!