Мне сложно придумать чистое регулярное выражение (в реализации Javascript), которое будет захватывать столько строк, сколько может следовать шаблону, но все, что внутри фигурных скобок, не должно соответствовать шаблону. Я не уверен, что лучший способ объяснить это, кроме как на примере:
Например: предположим, что шаблон таков, что строка должна начинаться с 0, заканчиваться где угодно, но разрешать только последовательность 1, 2 или 3 между ними, поэтому я использую ^(0[123]+0)
. Это должно соответствовать первой части строк:
<b>0213123123130</b>
<b>01231231231230</b>3123123
<b>01231230</b>123123031230
etc.
Но я хочу иметь возможность вставлять {gibberish}
между фигурными скобками в строку, и регулярное выражение позволяет ему нарушать шаблон. т.е. игнорировать узор фигурных скобок и все, что внутри, но по-прежнему захватывать всю строку, включая {gibberish}
. Таким образом, все будет выделено жирным шрифтом:
<b>01232231{whatever 3 gArBaGe? I want.}121{foo}2310</b>312{bar}3120123
, а 0 внутри фигурных скобок не завершит захват преждевременно, даже если шаблон правильный.
<b>01213123123123{21310030123012301}31231230</b>123
EDIT: Теперь, Я знаю, что мог бы просто сделать что-нибудь вроде ^0[123]*?(?:{.*})*?[123]*?0
, может быть? Но это работает, только если есть один набор фигурных скобок, и теперь мне нужно продублировать свой шаблон [123]
. По мере того, как этот шаблон [123]
становится более сложным, то, что он появляется более одного раза в Regex, становится действительно непонятным. Что-то вроде лучшего трюка с регулярными выражениями казалось многообещающим, но я не мог понять, как его здесь применить. Использование сумасшедших поисков кажется единственным способом сейчас, но я надеюсь, что есть более чистый способ.