私は文字列が正規表現にマッチするかどうかを知るために文字列match
関数を使っています。
if(str.match(/{regex}/))
これに違いはありますか?
if (/{regex}/.test(str))
彼らは同じ結果を与えるようですか?
まず、各機能が何をするのか見てみましょう。
regexObject。test(String)
正規表現と指定された文字列の間の一致を検索します。 trueまたはfalseを返します。
文字列。match(RegExp)
文字列を正規表現と照合するときに一致を取得するために使用されます。一致する配列を返します。ない場合は
null
を返します。
null
はfalse
と評価されるので、
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
パフォーマンスに関して違いはありますか?
はい私は MDN site にこの短いメモを見つけました。
文字列が正規表現regexpと一致するかどうかを知る必要がある場合は、regexp.test(string)を使用してください。
違いは重要ですか?
もう一度答えははいです!これは jsPerf ブラウザによって異なりますが、〜30% - 〜60%という違いがあります。
より高速なブール値チェックが必要な場合は.test
を使用してください。 g
グローバルフラグを使用する場合、すべての一致を取得するには.match
を使用してください。
正規表現でグローバルフラグを考慮に入れることを忘れないでください。
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
これは、新しい一致が見つかると、RegexpがlastIndexを追跡するためです。