2009-08-12 14 views
13

Sono completamente senza speranza con le espressioni regolari ...Regex: Trovare le stringhe che non iniziano con X

ho un nome Velocimacro #addButton, e ho una funzione di JS nome addButton(). Ora voglio trovare tutti i posti in cui viene chiamata la funzione JS. Quindi devo cercare "addButton", dove "addButton" non inizia con la chiave hash.

Qualche idea?

risposta

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

Sarà corrisponde ogni stringa in cui "addButton" è non preceduto da "#" o l'inizio della stringa.

+0

O per renderlo un po 'più robusto (in modo che corrisponda all'inizio di una stringa), '/ (?:^| [^ #]) AddButton /' – Amber

+0

impressionante! ... Penso che dovrei investire un po 'di tempo in regex ... continua a spuntare ovunque ... – peirix

22

Non so cosa sia Velocimacro (a giudicare dall'altra risposta credo che "addButton" apparirà sulla propria linea?), Ma il modo infallibile di trovare la parola "addButton" che non è preceduta da # è il seguente:

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

sarà:

  1. (?<!#)(?)
    • assicurarsi che la corrente posizione non viene preceduto da un (cancelletto) #
  2. \b(?)
    • Assicurarsi che la posizione attuale è un confine di parola (in questo caso si fa in modo che il carattere precedente non è un carattere di parola e che il carattere successivo è)
  3. addButton(?)
    • Match "addButton"
  4. \b(?)
    • Assicurarsi che c'è un confine di parola nella posizione corrente. Questo consente di evitare le cose di corrispondenza come "addButtonNew" (perché non c'è una parola confine tra "addButton" e "Nuovo")

Una differenza con questa espressione regolare e l'altra è che questo non consumerà la carattere prima di "addButton".

Una buona risorsa per l'apprendimento delle espressioni regolari è regular-expressions.info. Fare clic sul collegamento (?) Nell'elenco sopra per un collegamento alla pagina pertinente per quella parte della regex.

+0

ottima risposta informativa. Grazie! (: Stavo solo facendo una ricerca regolare in Eclipse, quindi consumare personaggi non ha importanza.(btw, Velocimacro è un po 'come una funzione in Velocity (linguaggio di templatura open source) e li chiami come normali funzioni, solo ogni comando in Velocity inizia con il tasto cancelletto) – peirix

+0

Grazie, come posso dire "Non combaciare # , incluso se seguito da un numero qualsiasi di spazi? " –

Problemi correlati