Регулярное выражение, извлечь строку НЕ между двумя скобками

ОК, 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 }

Это должно соответствовать всем символам трубы, которые не находятся внутри {}.

Зависит от языка / реализации, которую вы используете, но...

\|(?![^{]*})

Это соответствует трубе, за которой не следует } за исключением случая, когда { приходит первым


(?! ... ) известен как отрицательное прогнозное утверждение. Это легче понять, если мы начнем с положительного прогнозного утверждения:

\|(?=[^{]*})

Вышеуказанное соответствует только трубе, за которой следует }не встречая{ первый. Когда вы отрицаете это, заменяя = с ! теперь совпадение будет успешным только в том случае, если для положительного случая нет никакого способа быть истинным (также известным как дополнение).

Другие вопросы по тегам