Passen Sie die ganze Zeichenfolge an

164

Was ist der reguläre Ausdruck (in JavaScript, wenn es darauf ankommt), der nur übereinstimmt, wenn der Text genau übereinstimmt? Das heißt, am anderen Ende der Zeichenfolge sollten sich keine zusätzlichen Zeichen befinden.

Zum Beispiel, wenn ich bin versucht zu passen abc, dann 1abc1, 1abcund abc1würde nicht überein.

Jake Pearson
quelle
5
Für Neueinsteiger gibt es zwei gute Antworten, je nachdem, wonach Sie suchen. Der Fragesteller möchte wirklich \babc\b, was es beispielsweise ermöglichen würde, 123 abc 123zu passenabc (aber nicht die negativen Beispiele wie in der Frage); Stellen Sie ^abc$jedoch sicher, dass dies aam Anfang und cam Ende der Zeichenfolge steht. Andernfalls stimmt es nicht überein.
Andrew

Antworten:

304

Verwenden Sie die Start- und Endbegrenzer: ^abc$

Howard
quelle
3
@ Jake, ich bin froh, dass Howards Antwort funktioniert hat, aber ich denke, Sie sollten beachten, dass es nur funktioniert, wenn nur abc das einzige Element in der Zeichenfolge ist. Zum Beispiel würde es nicht übereinstimmen 'die ersten 3 Buchstaben im Alphabet sind abc'
matchew
Das hat bei mir funktioniert, vielleicht hätte mein Beispiel "abc def ghi" als Matchziel sein sollen.
Jake Pearson
@Jake Wenn dein String "abc def ghi" wäre, würde / ^ abc $ / nicht funktionieren. Beispiel: jsfiddle.net/XUyAc
Matchew
2
Ich verstehe, wenn ich "abc def ghi" entsprechen möchte, wäre mein regulärer Ausdruck^abc def ghi$
Jake Pearson
2
Hinweis: Damit ein Muster mit Alternativen mit einer ganzen Zeichenfolge übereinstimmt, muss es möglicherweise mit einer (nicht) Erfassungsgruppe umbrochen werden: /^(?:abc|def)$/oder /^(abc|def)$/. Wenn die Gruppe nicht verwendet wird, /^abc|def$/stimmt sie abcam Anfang der Zeichenfolge ODER defam Ende der Zeichenfolge überein .
Wiktor Stribiżew
39

Es hängt davon ab, ob. Du könntest

string.match(/^abc$/)

Das würde aber nicht mit der folgenden Zeichenfolge übereinstimmen: 'Die ersten 3 Buchstaben des Alphabets sind abc. nicht abc123 '

Ich denke, Sie würden verwenden wollen \b(Wortgrenzen):

var str = 'the first 3 letters of the alphabet are abc. not abc123';
var pat = /\b(abc)\b/g;
console.log(str.match(pat));

Live-Beispiel: http://jsfiddle.net/uu5VJ/

Wenn die erstere Lösung für Sie funktioniert, würde ich davon abraten, sie zu verwenden.

Das bedeutet, dass Sie möglicherweise Folgendes haben:

var strs = ['abc', 'abc1', 'abc2']
for (var i = 0; i < strs.length; i++) {
    if (strs[i] == 'abc') {
        //do something 
    }
    else {
        //do something else
    }
}

Während Sie verwenden könnten

if (str[i].match(/^abc$/g)) {
    //do something 
}

Es wäre wesentlich ressourcenintensiver. Für mich ist eine allgemeine Faustregel, dass für einen einfachen Zeichenfolgenvergleich ein bedingter Ausdruck verwendet wird, für ein dynamischeres Muster ein regulärer Ausdruck.

Weitere Informationen zu regulären JavaScript-Ausdrücken: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

Matchew
quelle
12
@NiharSawant Das liegt daran, dass dies nicht die Antwort auf die Frage ist, die das OP gestellt hat. Das OP möchte eindeutig nicht mit "'die ersten 3 Buchstaben des Alphabets sind abc" übereinstimmen, und die zweite Lösung hier funktioniert nicht für übereinstimmende allgemeine Regexe, z. B. / ^ [abc] + $ /
DJClayworth