2017-07-06 3 views
0

Lets sagen, ich habe diese Zeichenfolge:Regexp: nur Wort übereinstimmen, wenn es nicht mit einem Punkt startet

Schlüssel something.key() (.key) (key)

I nur möchte regex auf das Wort "Schlüssel" entsprechen, die im Inneren sind "[]"

[key] something.key() (.key) ([key])

Ich habe diese Regex derzeit verwendet /(?!\.)key/g

Aber das schließt nur Punkt und wählt immer noch Wort, auch wenn es mit einem Punkt beginnt.

+0

Ich hätte klarer sein sollen. Ich will nur das Wort "Wort" also nicht das Wort "etwas" zusammenbringen. Ich werde den Beitrag bearbeiten, um es klarer zu machen – Elias

+0

Was ist mit: (^ | [^ \.]) (Schlüssel) – Derek

+0

Problem ist, dass es auch "(Schlüssel", während ich will, dass es nur "Schlüssel" übereinstimmen – Elias

Antwort

0

Verwenden negative Charakterklasse keinen Punkt zum Spiel:

[^\.]

Dann ^zu passen hinzufügen keinen Punktoder bei der Anfang der Zeichenfolge:

([^\.]|^)

Fügen Sie der Gruppe ?: hinzu, um die Erfassung zu verhindern.

(?:[^\.]|^)

schließlich eine Erfassungsgruppe für Ihre dazutun:

(?:[^\.]|^)(word)

Sie könnten das gleiche Ergebnis mit negativem Blick hinter erreichen:

(?<!\.)word

Ach, JavaScript Regex implementiert es nicht.

+0

Dies ist ein Schritt vorwärts, aber es schafft auch ein anderes Problem, das ich auch angetroffen: Die Regex (?: [^ \.] | ^) (Wort) wählt "(Wort") als eine Übereinstimmung, ich möchte nur "Wort" auswählen. Oder wenn eine Zeichenfolge "/ Wort" enthält, dann Regex wählt das ganze "/ Wort" und nicht nur "Wort". – Elias

+0

Deshalb ist "Wort" in einer einfangenden Gruppe. Benutze nicht das ganze Spiel die erste einfangende Gruppe - es wird nicht das Zeichen vor "Wort" enthalten. –

+0

Hier ist eine Demo: https://jsfiddle.net/ft2o3apL/6/ –

Verwandte Themen