web-dev-qa-db-ja.com

regex.test V.S文字列が正規表現と一致するかどうかを知るためのstring.match

私は文字列が正規表現にマッチするかどうかを知るために文字列match関数を使っています。

if(str.match(/{regex}/))

これに違いはありますか?

if (/{regex}/.test(str))

彼らは同じ結果を与えるようですか?

257
gdoron

基本的な使い方

まず、各機能が何をするのか見てみましょう。

regexObjecttestString

正規表現と指定された文字列の間の一致を検索します。 trueまたはfalseを返します。

文字列matchRegExp

文字列を正規表現と照合するときに一致を取得するために使用されます。一致する配列を返します。ない場合はnullを返します。

nullfalseと評価されるので、

if ( string.match(regex) ) {
  // There was a match.
} else {
  // No match.
} 

パフォーマンス

パフォーマンスに関して違いはありますか?

はい私は MDN site にこの短いメモを見つけました。

文字列が正規表現regexpと一致するかどうかを知る必要がある場合は、regexp.test(string)を使用してください。

違いは重要ですか?

もう一度答えははいです!これは jsPerf ブラウザによって異なりますが、〜30% - 〜60%という違いがあります。

test vs match | Performance Test

結論

より高速なブール値チェックが必要な場合は.testを使用してください。 gグローバルフラグを使用する場合、すべての一致を取得するには.matchを使用してください。

401
gdoron

正規表現でグローバルフラグを考慮に入れることを忘れないでください。

var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi');    // => true
reg.test('abcdefghi');    // => false <=

これは、新しい一致が見つかると、RegexpがlastIndexを追跡するためです。

93
gtournie