我做错了什么,因为下面的两个字符串在下面的测试中都返回 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"));
最佳答案
您需要将模式中的反斜杠加倍。
var pattern = "^[\\s\\da-zA-ZåäöÅÄÖ_]+$"
问题是,当您以这种方式构建正则表达式对象时,会对字符串进行 两次 处理:一次将其解释为字符串,然后第二次将其解释为正则表达式表达。这两种微语法都使用 \
来表示某些东西,因此通过将它们加倍,您可以从字符串常量解析中得到一个反斜杠。
如果你的模式真的是一个常量,而不是你从不同部分动态构造的东西,那么你可以只使用正则表达式的 native 语法:
var pattern = /^[\s\da-zA-ZåäöÅÄÖ_]+$/;
只需要一个反斜杠,因为该模式仅作为正则表达式解析一次。
关于javascript - 为什么我的正则表达式无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12181608/