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
nulljika tidak ada.
Sejak nulldievaluasi 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 .testjika Anda ingin pemeriksaan boolean yang lebih cepat. Gunakan .matchuntuk mengambil semua kecocokan saat menggunakan gbendera 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