1

JavaScript での正規表現の使用について調べていると、次の 2 つのタイプの例に遭遇することがあります。

A:

var regex = /^[a-zA-Z0-9]+$/;

B:

var regex = new RegExp ("^[a-zA-Z0-9]*$"); 

を使用する必要がありますvar foo = new RegExpか? または、いつ各メソッドを選択する必要がありますか?

4

3 に答える 3

6

コンストラクターは、RegExp()実行時に動的に正規表現を組み立てる必要がある場合に便利です。式が完全に静的な場合は、ネイティブの正規表現構文 (「A」) を使用する方が簡単です。ネイティブ構文が使いやすいのは、正規表現が文字列定数として最初から使用されている場合のように、バックスラッシュの引用について心配する必要がないという事実に由来します。

于 2013-02-21T19:41:28.133 に答える
1

使用する必要がありますvar foo = new RegExpか?

いいえ、明らかにそうではありません。もう1つも同様に機能します。

または、いつ各方法を選択する必要がありますか?

正規表現リテラルは、正規表現エスケープ文字を文字列エスケープする必要がないため、読み取りと書き込みが簡単です。使用できるのは、それら(バックスラッシュ、引用符)だけです。また、スクリプトの「コンパイル」中に1回だけ解析されます。行が評価されるたびに、何も実行する必要はありません。

RegExpコンストラクターは、正規表現を動的に構築する場合にのみ使用する必要があります。

于 2013-02-21T19:42:27.643 に答える
1

が必要な「動的」正規表現の例を次に示しますnew RegExp

var search = 'dog',
    re = new RegExp('.*' + search + '.*');

静的正規表現の場合は、読み書きが簡単なため、リテラル構文 (A オプション) の方が適しています。

于 2013-02-21T19:50:38.410 に答える