javascript正則の変な問題を教えてください.

2242 ワード

javascriptは正則のマッチングをする時、2つの文法があります.
直接量文法
/pattern/attributes
RegExpオブジェクトを作成する構文:
new RegExp(pattern, attributes);
二つの方法は同じというべきですが、今日は一つの問題を見つけました.教えてください.次のような状況を見てください.
私は正則を書いて固定電話のフォーマットに合わせたいです.二つの異なる文法コードを使って次のようにします.
/**

*                  ,    RegExp        

*/

function checkTelNumber(str)

{

    var regExp = new RegExp("^(\d{3,4})-(\d{7,8})$");

    if(regExp .test(str)) 

        return true; 

    else

        return false;

}
もう一つの書き方
/**

*                  ,            

*/

function checkTelNumber(str)

{

    if(/^(\d{3,4})-(\d{7,8})$/.test(str)) 

        return true; 

    else

        return false;

}
この二つの方法は同じはずなのに、運行の結果は違っています.以下のように、戻り結果を直接呼び出します.
alert(checkTelNumber("0511-4405222"));
RegExpオブジェクトを作成する文法の検証方法を使うと、返ってくるのはすべてfalseで、RegExpオブジェクトを作成する文法に切り替えると、返ってくるのはtrueです.このことが一番分かりにくいところです.使っているうちに正しい結果を選ぶことができるという方法がいいですが、問題の根底を求めて友達の皆さんを教えてもらいたいです.原因は同じような問題がある友達のために解決方法を探しています.