Javascript regEx para eliminar todos los paréntesis excepto entre caracteres especiales

2

Necesito un regEx para eliminar todo (y )de una cadena, excepto aquellos entre dos @.

Ejemplo:

( [15] == @value [email protected] || [15] == @value [email protected] )  &&  ( [5] == @value 3 (ignore these)@ || [5] == @value [email protected] )  ||  ( [2] == @value [email protected] )

La cuerda que necesito:

[15] == @value [email protected] || [15] == @value [email protected]  &&  [5] == @value 3 (ignore these)@ || [5] == @value [email protected]  ||  [2] == @value [email protected] 

Intenté algo con este grupo que no captura para dividir con espacios en blanco, excepto aquellos entre @ pero no pude encontrar el camino:

(?:@[^@]*@|\S)

Estoy bajo presión para resolver esto, se agradece cualquier ayuda, gracias.

1
  • 1
    ¿tienes que usar expresiones regulares?
    depperm
    13 de oct a las 15:53
5

Puede utilizar esta expresión regular para hacer coincidir:

\s*[()](?=(?:[^@]*@[^@]*@)*[^@]*$)\s*

Y reemplácelo con una cadena vacía.

Demostración de RegEx

Detalles de la expresión regular:

  • \s*: Coincide con 0 o más espacios en blanco
  • [()]: Coincidir (o)
  • (?=: Iniciar una mirada hacia el futuro positiva
    • (?:[^@]*@[^@]*@)*: Coincide con 0 o más pares de @[email protected]subcadenas
    • [^@]*: Coincide con 0 más de cualquier cosa menos @
    • $: Fin
  • ): Poner fin a la anticipación positiva
  • \s*: Coincide con 0 o más espacios en blanco
3
  • ¡Gracias! Funciona en la mayoría de los navegadores, excepto Safari, aparece este error: "Expresión regular no válida: nombre de especificador de grupo no válido" 14 oct a las 9:43
  • Esto debería funcionar en navegadores antiguos, ya que no utilicé ningún lookbehind pero no uso safari 14 de octubre a las 10:25
  • 1
    Mi mal, fue otra expresión regular la que causó el problema. 14 de oct a las 11:29