Dopasuj cały ciąg


165

Jakie wyrażenie regularne (w JavaScript, jeśli ma to znaczenie) ma być dopasowane tylko wtedy, gdy tekst jest dokładnym dopasowaniem? Oznacza to, że na drugim końcu ciągu nie powinno być żadnych dodatkowych znaków.

Na przykład, jeśli staram się dostosować do nich abc, potem 1abc1, 1abci abc1nie pasuje.


5
Dla nowych użytkowników wyrażeń regularnych są na to dwie dobre odpowiedzi, w zależności od tego, czego szukasz. Pytający naprawdę chce \babc\b, co pozwoliłoby np. 123 abc 123Dopasować abc(ale nie negatywne przykłady jak w pytaniu); jednak ^abc$upewni się, że aznajduje się on na początku łańcucha i cna końcu - w przeciwnym razie nie będzie pasował.
Andrew,

Odpowiedzi:


305

Użyj ograniczników początku i końca: ^abc$


3
@Jake, cieszę się, że odpowiedź Howards zadziałała, ale myślę, że powinieneś zauważyć, że zadziała tylko wtedy, gdy tylko abc jest jedyną pozycją w ciągu. Na przykład nie pasuje do „pierwsze 3 litery alfabetu to abc”
matchew

To zadziałało dla mnie, może moim przykładem powinno być „abc def ghi” jako cel meczu.
Jake Pearson

@Jake, jeśli twój ciąg to „abc def ghi”, to / ^ abc $ / nie zadziała. np. jsfiddle.net/XUyAc
matchew

2
Rozumiem, jeśli chcę dopasować „abc def ghi”, moim wyrażeniem regularnym będzie^abc def ghi$
Jake Pearson

2
Uwaga: aby wzorzec z przemianami pasował do całego ciągu, może być konieczne owinięcie go (nie) grupą przechwytującą: /^(?:abc|def)$/lub /^(abc|def)$/. W przeciwnym razie, jeśli grupa nie jest używana, /^abc|def$/będzie pasować abcna początku łańcucha LUB defna końcu ciągu.
Wiktor Stribiżew

40

To zależy. Mógłbyś

string.match(/^abc$/)

Ale to nie pasowałoby do następującego ciągu: „pierwsze 3 litery alfabetu to abc. nie abc123 '

Myślę, że chciałbyś użyć \b(granice słów):

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

Przykład na żywo: http://jsfiddle.net/uu5VJ/

Jeśli to pierwsze rozwiązanie Ci odpowiada, odradzałbym jego stosowanie.

Oznacza to, że możesz mieć coś takiego:

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

Chociaż możesz użyć

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

Wymagałoby to znacznie więcej zasobów. Dla mnie ogólną zasadą jest użycie wyrażenia warunkowego do prostego porównania ciągów, a dla bardziej dynamicznego wzorca użyj wyrażenia regularnego.

Więcej o wyrażeniach regularnych JavaScript: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions


12
@NiharSawant To dlatego, że nie jest to odpowiedź na pytanie zadane przez OP. OP najwyraźniej nie chce dopasować „'pierwsze 3 litery alfabetu to abc”, a drugie rozwiązanie tutaj nie działa przy dopasowywaniu ogólnych
wyrażeń regularnych

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.