Regex, извлечь строку NOT между двумя скобками
OK вопрос с регулярным выражением, как извлечь символ НЕ между двумя символами, в этом случае скобки.
У меня есть строка, такая как:
word1 | {word2 | word3} | слово 4
Я хочу только получить первый и последний "трубу", а не вторую, которая находится между скобками. Я пробовал множество попыток с отрицательными каратами и отрицательными группировками и не могу заставить его работать.
В основном я использую это регулярное выражение в функции разделения JavaScript, чтобы разбить это на массив, содержащий: "word1", "{word2 | word3}", "word4".
Любая помощь будет принята с благодарностью!
Ответы
Ответ 1
В refiddle.com установлен JavaScript, попробуйте использовать этот шаблон
/\|(?![^{]*})/g
с этим текстом
word1 | {word2 | word3 } | word 4 | word 4 | {word2 | word3 }
Это должно соответствовать всем символам трубы, которые не находятся внутри {}.
Ответ 2
В зависимости от языка/реализации, которую вы используете, но...
\|(?![^{]*})
Это соответствует каналу, за которым не следует }
, за исключением случая, когда на первом месте находится {
.
(?! ... )
известен как отрицательное утверждение. Это легче понять, если мы начнем с положительного утверждения:
\|(?=[^{]*})
Вышеуказанный только соответствует трубе, за которой следует }
, не встречая сначала {
. Когда вы отрицаете это, заменив =
на !
, совпадение теперь будет только успешным, если нет пути для положительного случая быть истинным (также называемым дополнением).