2017-01-11 6 views
0

Ich versuche eine Regex zu schreiben, wo ich immer die zuletzt eingegebenen Zeichen mit der Regex verglich und versuche, nur '@' zu treffen nichts ist, bevor er und '@'Regex für die Übereinstimmung von zwei Zeichen, wobei @ das einzige Zeichen ist oder ein Leerzeichen vorausgeht

ich versuche zu verwenden:

lastTwoEntered.match(/(\s|^)@/); 

und

lastTwoEntered.match(/^\[email protected]/); 

aber beide sind ungenau.

Folgendes sollte nicht wahr zurück: 'a @' '@d' '@@' '' '@'

+0

Ich möchte nur '@' und '@' erhalten – ReganPerkins

+2

Ihr Titel sagt "gefolgt von einem Leerzeichen", aber Ihr Beispiel zeigt, dass ihm ein Leerzeichen vorausgeht. In jedem Fall verwenden Sie '^', um den Anfang der Zeichenfolge zu markieren. Alles, was Sie tun müssen, ist '$' am Ende Ihres ersten und es sollte funktionieren. –

+3

https://regex101.com/#javascript ist ein ** sehr ** nützliches Werkzeug. – jusopi

Antwort

1

Wenn ich verstehe, was Sie zu tun versuchen:

/^ @ $ |^@ $/

das "$" bedeutet, dass es mit endet @

1

starten:

lastTwoEntered.match(/^ [email protected]$/); 

Das Fragezeichen entspricht dem Leerzeichen 0 oder 1 Mal. Es gibt andere nützliche Quantifizierer, die Sie here finden können. Um gründlich zu verstehen, warum dies funktioniert, sollten Sie gierige und faule Übereinstimmung verstehen. This ist ein guter Beitrag, der es erklärt. Sagen wir einfach, dass der Matcher versucht, die größte gültige Zeichenfolge für Ihre Regex zu finden.


Also, für den ersten Regex Sie das Spiel wäre:

alles, Raum, an, etwas

oder

Anfang der Zeile, an, alles

Die zweiten Übereinstimmungen:

Anfang an alles andere als Grenze, an, etwas

Nichts davon ist, was Sie wollen.

Es ist eine gute Übung, Ihre Regex in normale Sprache zu übersetzen, um sicher zu sein, dass es das ist, was Sie wollen.

Verwandte Themen