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.


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$


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.