JavaScript RegExp,然后运行。test()不会';好像不行

JavaScript RegExp,然后运行。test()不会';好像不行,javascript,regex,Javascript,Regex,我认为通过实例化一个pattern=new RegExp()并传递一个字符串,然后使用.test(value)与使用/^…$/.test(value)是一样的,但它们似乎并不等同于使用RegExp,每次传递一个字符串都会失败。这不对吗?似乎有人说这应该行得通 如果所有人都失败了,他们会这样做吗 var str = "7D>"; var res = /^[A-Za-z0-9\d=!\-@._*]*$/.test(str); console.log(res); // false which i

我认为通过实例化一个pattern=new RegExp()并传递一个字符串,然后使用.test(value)与使用/^…$/.test(value)是一样的,但它们似乎并不等同于使用RegExp,每次传递一个字符串都会失败。这不对吗?似乎有人说这应该行得通

如果所有人都失败了,他们会这样做吗

var str = "7D>";
var res = /^[A-Za-z0-9\d=!\-@._*]*$/.test(str);
console.log(res); // false which is correct

var patt = /^[A-Za-z0-9\d=!\-@._*]*$/;
var res = patt.test(str);
console.log(res); // false which is correct

var patt = new RegExp("/^[A-Za-z0-9\d=!\-@._*]*$/");
var res = patt.test(str);
console.log(res); // false which is correct, but suspicious based on follow results
应该都过去了,但他们没有

var str = "7D";
var res = /^[A-Za-z0-9\d=!\-@._*]*$/.test(str);
console.log(res); // true which is correct

var patt = /^[A-Za-z0-9\d=!\-@._*]*$/;
var res = patt.test(str);
console.log(res); // true which is correct
但这两次尝试都在应该通过的时候失败了

var patt = new RegExp("/^[A-Za-z0-9\d=!\-@._*]*$/");
var res = patt.test(str);
console.log(res); // false which is NOT correct

var patt = new RegExp("^[A-Za-z0-9\d=!\-@._*]*$");
var res = patt.test(str);
console.log(res); // ALSO false which is NOT correct
两件事:

  • 使用字符串时不包括
    /

  • 确实必须转义反斜杠(与往常一样,在字符串文本中)

  • 因此:

    var patt = new RegExp("/^[A-Za-z0-9\d=!\-@._*]*$/");
    
    应该是

    var patt = new RegExp("^[A-Za-z0-9\\d=!\\-@._*]*$");
    //                    ^           ^^   ^^        ^
    
    如果有标志,则应将其作为第二个字符串参数包含:

    var patt = new RegExp("^[a-z\\d=!\\-@._*]*$", "i");
    

    旁注:

    \d
    表示规范中定义为
    0-9
    的“数字”,因此字符类中有
    0-9
    \d
    是多余的

    两件事:

  • 使用字符串时不包括
    /

  • 确实必须转义反斜杠(与往常一样,在字符串文本中)

  • 因此:

    var patt = new RegExp("/^[A-Za-z0-9\d=!\-@._*]*$/");
    
    应该是

    var patt = new RegExp("^[A-Za-z0-9\\d=!\\-@._*]*$");
    //                    ^           ^^   ^^        ^
    
    如果有标志,则应将其作为第二个字符串参数包含:

    var patt = new RegExp("^[a-z\\d=!\\-@._*]*$", "i");
    

    旁注:


    \d
    表示规范中定义为
    0-9
    的“数字”,因此字符类中有
    0-9
    \d
    是多余的

    您必须将传递给
    新RegExp
    的字符串中的
    \-
    转义为
    \-
    。否则,请将
    -
    放在字符集的末尾。@torazaburo:开始,而不是结束。编辑:嘿,很有趣,两个都有用。知道这些很有用。至少有一个我使用的rex引擎(不是JavaScript)在结尾处使用了
    -
    表示字符类没有上限。@T.J.Crowder begin或end?@torazaburo:显然是的。您必须将传递给
    新RegExp
    的字符串中的
    \-
    转义为
    \-
    。否则,请将
    -
    放在字符集的末尾。@torazaburo:开始,而不是结束。编辑:嘿,很有趣,两个都有用。知道这些很有用。至少有一个我使用的rex引擎(不是JavaScript)在结尾处使用了
    -
    ,这意味着字符类没有上限。@T.J.Crowder start或end?@torazaburo:显然是的。