18

ターゲット文字列に対してテストすることnew RegExp("regex");と使用することの間に違いはありますか?/same_regex/これらの2つのアプローチを使用しているときに異なる検証結果が得られたため、この質問をしています。メールフィールドの検証に使用したスニペットは次のとおりです。


var email="didxga@gmail.comblah@foo.com";

var regex1 = new RegExp("^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"); 

var regex2 = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;

//using RegExp object
if(regex1.test(email))  {
       console.log("email matched regex1");    
  } else {
       console.log("email mismatched regex1");   
  }
//using slash notation
if(regex2.test(email))  {
       console.log("email matched regex2");   
  } else {  
       console.log("email mismatched regex2");
  }

2つの一貫性のない結果が得られました:

メール一致regex1
メールの不一致regex2

ここに違いがあるのか​​、この特定の例で何かを省略したのか疑問に思いますか?
実行可能な例については、こちらを参照してください

4

4 に答える 4

14
于 2011-05-27T08:44:52.603 に答える
13

/.../正規表現リテラルと呼ばれます。new RegExpRegExpコンストラクター関数を使用して、正規表現オブジェクトを作成します。

Mozillaの開発者ページから

正規表現リテラルは、スクリプトが評価されるときに正規表現のコンパイルを提供します。正規表現が一定のままである場合は、パフォーマンスを向上させるためにこれを使用してください。

コンストラクター関数を使用すると、正規表現の実行時コンパイルが提供されます。正規表現のパターンが変更されることがわかっている場合、またはパターンがわからず、ユーザー入力などの別のソースから取得している場合は、コンストラクター関数を使用します。

于 2011-05-27T08:47:57.733 に答える
4

http://www.regular-expressions.info/javascript.html 「JavaScript RegExp オブジェクトの使用方法」セクションを参照してください。

RegExp(regx) を使用している場合、regx は文字列形式にする必要があります ex:- \w+ は asregx = /\w+/または as として作成できますregx = new RegExp("\\w+")

于 2011-05-27T08:44:33.493 に答える
2

違いは、少なくともあなたの場合は逃げることにあります。//表記を使用する場合は、「/」を「\ /」でエスケープする必要があります。正規表現表記を使用する場合は、引用符をエスケープします。

于 2011-05-27T08:46:06.500 に答える