2010-12-02 19 views
5

Esto debería ser sencillo. Necesito una expresión regular que seleccione todo lo que no contenga específicamente una palabra determinada.REGEX: Seleccione todo NO igual a una determinada cadena

Así que si tengo esta frase: "Hay una palabra en el medio de esta oración". Y la expresión regular tiene todo menos "medio", debería seleccionar todo en esa oración pero "medio".

¿Hay alguna manera fácil de hacerlo?

Gracias.

+0

eh, solo copie los datos en una cadena var y haga una búsqueda/reemplazo .... probablemente sea más económico que RE de todos modos. – Keng

+0

¿Puede esta palabra aparecer más de una vez en la oración? –

Respuesta

2

No es posible que una sola operación de coincidencia de expresiones regulares sea discontinua.

se pueden utilizar dos grupos de captura:

(.*)middle(.*)

concatenase el contenido de la captura de los grupos 1 y 2 después del partido.

Es posible que desee habilitar la opción "dot also coincide con newline" en su analizador.
Véase, por ejemplo Java's DOTALL, .NET's Singleline, Perl's s, etc.

+0

Cuando/si lo hace, asegúrese de habilitar el '.' para que coincida también con los caracteres de nueva línea. – Keng

+0

@Keng buen punto. Editado en. –

+0

Eso no garantiza que ninguno de los grupos de captura contenga '" medio "'. ¿Deberia? – tchrist

1

lookaround positivo es el camino a seguir:

/^(.+)(?=middle)/ -- gets everything before middle, not including middle 

y

/(?!middle)(.+)$/ -- gets everything after middle, not including middle 

A continuación, sólo combinar los resultados de ambos

+0

Cuando/si lo hace, asegúrese de habilitar el '.' para que coincida con los caracteres de nueva línea también. – Keng

Cuestiones relacionadas