2011-09-27 19 views
5

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

Por ejemplo:

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

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

Hereisastring(that I want to)replacespacesin. 

¿Hay una manera fácil de hacer esto con búsqueda hacia delante o lookbehing operadores?

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

+2

puede estar anidada esos paréntesis? –

+0

Sin paréntesis anidados. –

Respuesta

9

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 la llanura Inglés: coincide con uno o más caracteres de espacio en blanco, si bien un ( o la entrada de final de puede ser visto adelante sin encontrar ningún paréntesis en el medio.

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

Lo anterior no funcionará si:

  • no están anidados entre paréntesis
  • paréntesis se puede escapar
+0

Muchas gracias. ¡Esto es genial! –

+0

De nada Senica. –

Cuestiones relacionadas