为什么我不能让我的正则表达式工作?

时间:2012-08-29 15:39:07

标签: javascript regex

我在做错了,因为下面的两个字符串在下面测试时都会返回false

    var pattern = "^[\s\da-zA-ZåäöÅÄÖ_]+$"
    var reg = new RegExp(pattern);

    console.log(reg.test("This should be invalid as it is full with invalid chars. #!¤%&/()=?"));
    console.log(reg.test("This is an valid string, despite that Swedish chars such as ÅÄÖ are used"));

1 个答案:

答案 0 :(得分:7)

你需要加倍模式中的反斜杠。

var pattern = "^[\\s\\da-zA-ZåäöÅÄÖ_]+$"

问题在于,当你以这种方式构建正则表达式对象时,会在字符串上进行两次次传递:一次将其解释为字符串,然后第二次将其解释为常规表达。这两个微语法都使用\来表示某些内容,因此通过将它们加倍,您可以从字符串常量解析中获得单个反斜杠。

如果你的模式确实是一个常量,而不是你从不同的部分动态构造的模式,那么你可以只使用正则表达式的本机语法:

var pattern = /^[\s\da-zA-ZåäöÅÄÖ_]+$/;

只需要一个反斜杠,因为该模式仅作为正则表达式解析一次。