9

これが true ではなく false を返す理由。

function doit(expression) {

    var regex = new RegExp(expression, 'g');

    alert(regex.test('mename@memail.com'));
}

doit("/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/");
​

http://jsfiddle.net/hAV8Q/

4

2 に答える 2

21

式を適切にフォーマットします。

function doit(expression) {
    var regex = new RegExp(expression, 'g');
    alert(regex.test('mename@memail.com'));
}

doit("^\\w+([-+.\\']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
// no / here, escape \

または式を直接渡します。

function doit(expression) {
    alert(expression.test('mename@memail.com'));
}

doit(/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);

</p>


スラッシュ ( /) は式の一部ではなく、正規表現リテラルを示します。バックスラッシュは文字列のエスケープ文字でもあるため、式を含む文字列を使用する場合は、それらを省略してすべてのバックスラッシュをエスケープする必要があります。

于 2012-06-21T17:41:33.120 に答える
3

で正規表現を作成するときnew RegExp()は、区切り文字を使用しないためです。/文字列の前後の を削除します。

または、前後の引用符を削除して正規表現自体を渡し、new RegExp()呼び出しを省略します。

于 2012-06-21T17:42:18.733 に答える