У меня есть это регулярное выражение, это пример:

/par(tir|te|s)|(quitter.*maison)|((heure|quand).*(rendez-vous|journée))/i

Я хотел бы разделить его на "|" в регулярном выражении, но этот символ не может быть в скобках для разнесения. Таким образом, ожидаемый результат должен быть таким:

1: par(tir|te|s)
2: (quitter.*maison)
3: ((heure|quand).*(rendez-vous|journée))

Мой разум в беде, кто-то может мне помочь?

0
Hugo Giffard 4 Мар 2018 в 20:35

3 ответа

Лучший ответ

С огромной помощью этого старого вопроса мне удалось построить это регулярное выражение.
Соответствует скобкам с их содержимым, включая предыдущий текст:

(?:\w+)?\((?:[^()]*|\((?:[^()]*|\([^()]*\))*\))*\)

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

0
GalAbra 4 Мар 2018 в 17:53

Вы можете попробовать это регулярное выражение /\|(?![^\(]*\))/g

const str = '/par(tir|te|s)|(quitter.maison)|((heure|quand).(rendez-vous|journée))/i';
console.log(str.split(/\|(?![^\(]*\))/g));
0
Hassan Imam 4 Мар 2018 в 17:54

Вы можете разделить это регулярное выражение, которое достигает именно того результата, который вы указали из входного примера:

/\|(?!(?:\w+\|?)+\))/ig
0
user7125259user7125259 4 Мар 2018 в 17:54