2009-08-12 23 views
13

estoy completamente inútil con expresiones regulares ...Regex: Encontrar cadenas que no se inicia con X

tengo un Velocimacro nombrado #addButton, y tengo una función JS nombrado addButton(). Ahora quiero encontrar todos los lugares a los que se llama la función JS. Así que tengo que buscar "addButton", donde "addButton" no comienza con la tecla hash.

¿Alguna idea?

Respuesta

12
/([^#]|^)addButton/ 

que coincidirá con cada cadena en la que "addButton" es no precedido por "#" o el principio de la cadena.

+0

O para hacerlo un poco más robusto (para que coincida al principio de una cadena), '/ (?:^| [^ #]) AddButton /' – Amber

+0

¡increíble! ... Creo que debería invertir algo de tiempo en Regex ... simplemente sigue apareciendo en todas partes ... – peirix

22

No sé qué es Velocimacro (a juzgar por la otra respuesta, supongo que "addButton" aparecerá en su propia línea?), Pero la manera segura de encontrar la palabra "addButton" que no está precedida por # es la siguiente:

/(?<!#)\baddButton\b/ 

será:

  1. (?<!#)(?)
    • Asegúrese de que el actual posición no está precedida por un (almohadilla) #
  2. \b(?)
    • Asegúrese de que la posición actual es un límite de palabra (en este caso se asegura de que el carácter anterior no es un carácter de palabra y que el siguiente carácter es)
  3. addButton(?)
    • Partido "addButton"
  4. \b(?)
    • Asegúrese de que hay un límite de palabra en la posición actual. Esto evita cosas a juego como "addButtonNew" (porque no hay límite de palabra entre "addButton" y "Nuevo")

A diferencia con esta expresión regular y la otra es que éste no va a consumir el personaje antes de "addButton".

Un buen recurso para aprender sobre expresiones regulares es regular-expressions.info. Haga clic en el enlace (?) En la lista anterior para obtener un enlace a la página relevante para esa parte de la expresión regular.

+0

excelente respuesta informativa. ¡Gracias! (: Solo estaba haciendo una búsqueda de expresiones regulares en Eclipse, por lo que consumir personajes no importa.(Por cierto, Velocimacro es como una función en Velocity (lenguaje de plantillas de código abierto), y las llamas como funciones normales, solo cada comando en Velocity comienza con la tecla hash) – peirix

+0

Gracias, ¿cómo puedo decir "No coinciden" # , incluyendo si es seguido por cualquier cantidad de espacios? " –

Cuestiones relacionadas