Çoğu zaman matchbir 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 matchbir 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
nullyoksa bir dizi döndürür .
Yana nullolarak 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

.testDaha hızlı bir boole kontrolü istiyorsanız kullanın . Genel bayrağı .matchkullanı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