javascript - 为什么我的正则表达式无法正常工作?

标签 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"));

最佳答案

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

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

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

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

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

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

关于javascript - 为什么我的正则表达式无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12181608/

相关文章:

javascript - 使用NodeJS在事件池中处理请求

regex - 如何使用正则表达式验证电子邮件地址?

java - 在 Scanner.useDelimiter() 中使用正则表达式时出现额外的空白

java - java Dash 版本中 unicode 的正则表达式

java - Java 中的正则表达式与文本文件中的任何内容都不匹配

javascript - 添加控件时出现类型错误 "null has no properties"

javascript - 谁用 Jquery Ajax 附加 php onchange

javascript - React - 语法问题

javascript - Angular 4 Http POST 不工作

c++ - C++ 中的正则表达式跳过