Tengo esta expresión regular, es un ejemplo:

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

Me gustaría dividirlo por "|" en una expresión regular pero este personaje no puede estar entre paréntesis para la explosión. Entonces, el resultado esperado debe ser que:

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

Mi mente está en problemas, ¿alguien me puede ayudar?

0
Hugo Giffard 4 mar. 2018 a las 20:35

3 respuestas

La mejor respuesta

Con una gran ayuda de esta vieja pregunta, pude construir esta expresión regular.
Coincide con paréntesis con su contenido, incluido el texto anterior:

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

Sin embargo, debo decir que los paréntesis anidados son muy difíciles de manejar con expresiones regulares.

0
GalAbra 4 mar. 2018 a las 17:53

Puedes probar esta expresión regular /\|(?![^\(]*\))/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 mar. 2018 a las 17:54

Puede dividirse en esta expresión regular, que logra precisamente el resultado que especificó a partir de la muestra de entrada proporcionada:

/\|(?!(?:\w+\|?)+\))/ig
0
user7125259user7125259 4 mar. 2018 a las 17:54