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