多くのmatch
場合、文字列関数を使用して、文字列が正規表現に一致するかどうかを確認しています。
if(str.match(/{regex}/))
これには違いがありますか?
if (/{regex}/.test(str))
彼らは同じ結果を与えるようですか?
多くのmatch
場合、文字列関数を使用して、文字列が正規表現に一致するかどうかを確認しています。
if(str.match(/{regex}/))
これには違いがありますか?
if (/{regex}/.test(str))
彼らは同じ結果を与えるようですか?
回答:
まず、各関数の機能を見てみましょう。
regexObject。テスト(文字列)
正規表現と指定された文字列の一致を検索します。trueまたはfalseを返します。
文字列。一致(RegExp)
文字列を正規表現と照合するときに一致を取得するために使用されます。一致した配列、または一致
null
がない場合は配列を返します。
はにnull
評価されるのでfalse
、
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
パフォーマンスに関して違いはありますか?
はい。MDNサイトでこの短いメモを見つけました。
文字列が正規表現regexpと一致するかどうかを知る必要がある場合は、regexp.test(string)を使用します。
違いは重要ですか?
答えはもう一度YESです!私がまとめたこのjsPerfは、ブラウザによっては〜30%-〜60 %の違いがあることを示しています 。
.test
より高速なブール値チェックが必要な場合に使用します。グローバルフラグ.match
を使用するときに、すべての一致を取得するために使用しますg
。
正規表現のグローバルフラグを考慮することを忘れないでください。
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
これは、新しい一致が見つかったときにRegexpがlastIndexを追跡するためです。
.test()
ですか。.test()
文字列に一致する正規表現があるかどうかを確認するポイントはありませんか?
これは私のベンチマーク結果です
テスト4,267,740 ops / sec±1.32%(60回の実行をサンプリング)
exec 3,649,719 ops / sec±2.51%(60回の実行をサンプリング)
3,623,125演算/秒に一致±1.85%(62ランのサンプル)
indexOf 6,230,325 ops / sec±0.95%(62ランのサンプル)
testメソッドはmatchメソッドより高速ですが、最も高速なメソッドはindexOfです。