Pregunta Reemplazar espacios pero no cuando entre paréntesis


Supongo que puedo hacer esto con múltiples expresiones regulares con bastante facilidad, pero quiero reemplazar todos los espacios en una cadena, pero no cuando esos espacios están entre paréntesis.

Por ejemplo:

Here is a string (that I want to) replace spaces in.

Después de la expresión regular quiero que la cadena sea

Hereisastring(that I want to)replacespacesin.

¿Hay una manera fácil de hacer esto con los operadores de búsqueda anticipada o de búsqueda?

Estoy un poco confundido sobre cómo funcionan, y no estoy seguro de que funcionen en esta situación.


5
2017-09-27 18:05


origen


Respuestas:


Prueba esto:

replace(/\s+(?=[^()]*(\(|$))/g, '')

Una explicación rápida:

\s+          # one or more white-space chars
(?=          # start positive look ahead
  [^()]*     #   zero or more chars other than '(' and ')'
  (          #   start group 1
    \(       #     a '('
    |        #     OR
    $        #     the end of input
  )          #   end group 1
)            # end positive look ahead

En inglés simple: coincide con uno o más caracteres de espacios en blanco si es un ( o el final de la entrada se puede ver a continuación sin encontrar ningún paréntesis en el medio.

Una demostración en línea de Ideone: http://ideone.com/jaljw

Lo anterior no funcionará si:

  • hay paréntesis anidados
  • el paréntesis se puede escapar

9
2017-09-27 18:10