Cocokkan seluruh string

165

Apa persamaan reguler (dalam JavaScript jika itu penting) yang hanya cocok jika teksnya benar-benar cocok? Artinya, seharusnya tidak ada karakter tambahan di ujung string.

Sebagai contoh, jika saya mencoba untuk mencocokkan untuk abc, kemudian 1abc1, 1abcdan abc1akan tidak cocok.

Jake Pearson
sumber
5
Bagi mereka yang baru mendaftar, ada dua jawaban bagus untuk ini, tergantung pada apa yang Anda cari. Penanya benar-benar ingin \babc\b, yang akan memungkinkan misalnya 123 abc 123untuk mencocokkan abc(tetapi bukan contoh negatif seperti dalam pertanyaan); Namun, ^abc$akan memastikan bahwa aitu di awal string dan cpada akhirnya - jika tidak maka tidak akan cocok.
Andrew

Jawaban:

305

Gunakan pembatas awal dan akhir: ^abc$

Howard
sumber
3
@Jake, saya senang jawaban howards berhasil, tapi saya pikir Anda harus mencatat itu hanya akan berfungsi ketika hanya abc adalah satu-satunya item dalam string. Misalnya, Ini tidak akan cocok dengan '3 huruf pertama dalam alfabet abc'
matchew
Ini bekerja untuk saya, mungkin contoh saya seharusnya "abc def ghi" sebagai target pertandingan.
Jake Pearson
@Jake jika string Anda adalah "abc def ghi" maka / ^ abc $ / tidak akan berfungsi. mis: jsfiddle.net/XUyAc
matchew
2
Saya mengerti, jika saya ingin mencocokkan "abc def ghi" regex saya adalah^abc def ghi$
Jake Pearson
2
Catatan: untuk membuat pola dengan alternatif yang cocok dengan keseluruhan string, mungkin perlu untuk membungkusnya dengan grup penangkap (bukan): /^(?:abc|def)$/atau /^(abc|def)$/. Jika tidak, jika grup tidak digunakan, /^abc|def$/akan cocok abcpada awal string ATAU defpada akhir string.
Wiktor Stribiżew
40

Tergantung. Anda bisa

string.match(/^abc$/)

Tapi itu tidak cocok dengan string berikut: '3 huruf pertama dari alfabet adalah abc. tidak abc123 '

Saya pikir Anda ingin menggunakan \b(batas kata):

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

Contoh langsung: http://jsfiddle.net/uu5VJ/

Jika solusi sebelumnya bekerja untuk Anda, saya akan menyarankan untuk tidak menggunakannya.

Itu berarti Anda mungkin memiliki sesuatu seperti berikut:

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

Sementara Anda bisa menggunakannya

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

Ini akan menjadi jauh lebih intensif sumber daya. Bagi saya, aturan umum adalah untuk perbandingan string sederhana menggunakan ekspresi kondisional, untuk pola yang lebih dinamis gunakan ekspresi reguler.

Lebih lanjut tentang regex JavaScript: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

cocok
sumber
12
@NiharSawant Itu karena ini bukan jawaban untuk pertanyaan OP. OP jelas tidak ingin mencocokkan "'3 huruf pertama dari abjad adalah abc", dan solusi kedua di sini tidak bekerja untuk mencocokkan regex umum, misalnya / ^ [abc] + $ /
DJClayworth