2009-08-12 14 views
13

ich mit regulären Ausdrücken völlig hoffnungslos bin ...Regex: Suche nach Zeichenketten, die nicht mit X beginnen

Ich habe ein Velocimacro #addButton genannt, und ich habe eine JS-Funktion addButton() benannt. Jetzt möchte ich alle Orte finden, an denen die JS-Funktion aufgerufen wird. Also muss ich nach "addButton" suchen, wobei "addButton" nicht mit dem Hash-Schlüssel startet.

Irgendwelche Ideen?

Antwort

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

Es wird jede Zeichenfolge übereinstimmen, wo „AddButton“ nicht vorangestelltem „#“ oder der Anfang der Zeichenfolge ist.

+0

Oder um es ein wenig robuster zu machen (so dass es am Anfang eines Strings passt), '/ (?:^| [^ #]) AddButton /' – Amber

+0

genial! ... Ich denke, ich sollte etwas Zeit in Regex investieren ... es taucht immer wieder überall auf ... – peirix

22

Ich weiß nicht, was Velocimacro ist (ausgehend von der anderen Antwort denke ich, dass "addButton" in einer eigenen Zeile erscheint?), Aber die sichere Methode, das Wort "addButton" zu finden, dem nicht vorausgeht # ist die folgende:

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

Es wird:

  1. (?<!#)(?)
    • Vergewissern Sie sich, dass die aktuelle Position nicht durch eine # (Raute)
  2. \b(?)
    • Achten Sie darauf, vorangestellt, dass die aktuelle Position eine Wortgrenze ist (in diesem Fall ist es dafür sorgt, dass das vorherige Zeichen kein Wortzeichen ist und daß das nächste Zeichen)
  3. addButton(?)
    • Match "AddButton"
  4. \b(?)
    • Vergewissern Sie sich, dass es eine Wortgrenze an der aktuellen Position. Dies vermeidet passende Dinge wie „addButtonNew“ (weil es keine Wortgrenze zwischen „AddButton“ und „Neu“ ist)

Ein Unterschied mit diesem regulären Ausdruck und das andere ist, dass dieser wird die nicht konsumieren Zeichen vor "addButton".

Eine gute Quelle zum Erlernen von regulären Ausdrücken ist regular-expressions.info. Klicken Sie auf den Link (?) In der obigen Liste, um einen Link zu der relevanten Seite für diesen Teil der Regex zu erhalten.

+0

ausgezeichnete informative Antwort. Vielen Dank! (: Ich habe gerade eine Regex-Suche in Eclipse gemacht, also spielt es keine Rolle, welche Charaktere zu konsumieren sind.(Übrigens, Velocimacro ist wie eine Funktion in Velocity (Open-Source-Templating-Sprache), und Sie nennen sie wie normale Funktionen, nur jeder Befehl in Velocity beginnt mit dem Hash-Schlüssel) – peirix

+0

Danke, wie kann ich sagen "Nicht passen # , einschließlich wenn eine beliebige Anzahl von Leerzeichen folgen? " –

Verwandte Themen