Sering kali saya menggunakan string match
fungsi untuk mengetahui apakah string cocok dengan ekspresi reguler.
if(str.match(/{regex}/))
Apakah ada perbedaan antara ini:
if (/{regex}/.test(str))
Mereka sepertinya memberikan hasil yang sama?
Sering kali saya menggunakan string match
fungsi untuk mengetahui apakah string cocok dengan ekspresi reguler.
if(str.match(/{regex}/))
Apakah ada perbedaan antara ini:
if (/{regex}/.test(str))
Mereka sepertinya memberikan hasil yang sama?
Jawaban:
Pertama, mari kita lihat apa fungsi masing-masing:
regexObject . tes ( String )
Menjalankan pencarian untuk kecocokan antara ekspresi reguler dan string yang ditentukan. Mengembalikan nilai true atau false .
tali . pertandingan ( RegExp )
Digunakan untuk mengambil kecocokan saat mencocokkan string dengan ekspresi reguler. Mengembalikan array dengan pertandingan atau
null
jika tidak ada.
Sejak null
dievaluasi menjadi false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Apakah ada perbedaan mengenai kinerja?
Ya . Saya menemukan catatan singkat ini di situs MDN :
Jika Anda perlu tahu apakah string cocok dengan ekspresi reguler regexp, gunakan regexp.test (string).
Apakah perbedaannya signifikan?
Jawabannya sekali lagi adalah YA ! JsPerf ini saya kumpulkan menunjukkan perbedaannya adalah ~ 30% - ~ 60% tergantung pada browser:
Gunakan .test
jika Anda ingin pemeriksaan boolean yang lebih cepat. Gunakan .match
untuk mengambil semua kecocokan saat menggunakan g
bendera global.
.test()
. :)
Jangan lupa mempertimbangkan bendera global di regexp Anda:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
Ini karena Regexp melacak LastIndex ketika kecocokan baru ditemukan.
.test()
? bukan gunanya .test()
memeriksa apakah string memiliki regexp yang cocok?
Ini adalah hasil benchmark saya
uji 4.267.740 ops / dt ± 1.32% (60 run sampel)
exec 3.649.719 ops / dt ± 2.51% (60 run sampel)
cocok 3,623,125 ops / detik ± 1,85% (sampel 62 run)
indexOf 6.230.325 ops / dt ± 0.95% (62 run sampel)
Metode pengujian lebih cepat daripada metode pertandingan, tetapi metode tercepat adalah indexOf