Çoğu zaman match
bir dizenin normal bir ifade ile eşleşip eşleşmediğini bilmek için string işlevini kullanıyorum .
if(str.match(/{regex}/))
Bunlar arasında herhangi bir fark var mı:
if (/{regex}/.test(str))
Aynı sonucu veriyorlar mı?
Çoğu zaman match
bir dizenin normal bir ifade ile eşleşip eşleşmediğini bilmek için string işlevini kullanıyorum .
if(str.match(/{regex}/))
Bunlar arasında herhangi bir fark var mı:
if (/{regex}/.test(str))
Aynı sonucu veriyorlar mı?
Yanıtlar:
İlk olarak, her bir işlevin ne yaptığını görelim:
regexObject . test ( Dize )
Normal bir ifade ile belirtilen bir dize arasındaki eşleşmeyi arar. Doğru veya yanlış döndürür .
dize . eşleşme ( RegExp )
Bir dizeyi normal ifadeyle eşleştirirken eşleşmeleri almak için kullanılır. Eşleşmeleri olan veya
null
yoksa bir dizi döndürür .
Yana null
olarak değerlendirilirse false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Performansla ilgili bir fark var mı?
Evet . Bu kısa notu MDN sitesinde buldum :
Bir dizenin normal ifade regexp'si ile eşleşip eşleşmediğini bilmeniz gerekiyorsa regexp.test (string) kullanın.
Fark önemli mi?
Cevap bir kez daha EVET ! Bu jsPerf I fark gösterir araya ~% 60 - yaklaşık% 30 : tarayıcı bağlı olarak
.test
Daha hızlı bir boole kontrolü istiyorsanız kullanın . Genel bayrağı .match
kullanırken tüm eşleşmeleri almak için kullanın g
.
.test()
. :)
Normal ifadenizdeki global bayrağı dikkate almayı unutmayın:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
Bunun nedeni, Regexp'in yeni bir eşleşme bulunduğunda lastIndex'in kaydını tutmasıdır.
.test()
nedir? .test()
dizenin eşleşen bir normal ifade olup olmadığını kontrol etmek değil mi?
Bu benim kıyaslama sonuçlarım
test 4.267.740 ops / sn ±% 1.32 (60 çalışma örneklenmiş)
yürütme 3,649,719 ops / sn ±% 2,51 (60 çalışma örneklenmiş)
maç 3,623,125 ops / sn ± 1,85% (62 örneklenmiş örnek)
endeks 6.230.325 ops / sn ±% 0.95 (62 örneklenmiş çalışma)
test yöntemi eşleme yönteminden daha hızlıdır, ancak en hızlı yöntem indexOf