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?
javascript
regex
performance
gdoron mendukung Monica
sumber
sumber
Jawaban:
Penggunaan Dasar
Pertama, mari kita lihat apa fungsi masing-masing:
regexObject . tes ( String )
tali . pertandingan ( RegExp )
Sejak
null
dievaluasi menjadifalse
,Performa
Apakah ada perbedaan mengenai kinerja?
Ya . Saya menemukan catatan singkat ini di situs MDN :
Apakah perbedaannya signifikan?
Jawabannya sekali lagi adalah YA ! JsPerf ini saya kumpulkan menunjukkan perbedaannya adalah ~ 30% - ~ 60% tergantung pada browser:
Kesimpulan
Gunakan
.test
jika Anda ingin pemeriksaan boolean yang lebih cepat. Gunakan.match
untuk mengambil semua kecocokan saat menggunakang
bendera global.sumber
.test()
. :)Jangan lupa mempertimbangkan bendera global di regexp Anda:
Ini karena Regexp melacak LastIndex ketika kecocokan baru ditemukan.
sumber
.test()
? bukan gunanya.test()
memeriksa apakah string memiliki regexp yang cocok?Ini adalah hasil benchmark saya
Metode pengujian lebih cepat daripada metode pertandingan, tetapi metode tercepat adalah indexOf
sumber