javascript - 我的正则表达式不起作用

标签 javascript regex object

我没有看到创建新的正则表达式对象或使用 /.../ 之间的区别 因为如果我执行以下命令,我会得到:

真假

alert(/^\d{4}$/.test(obj.value)+" "+(new RegExp("^\d{4}$")).test(obj.value));

提前致谢

最佳答案

当您从字符串创建 RegExp 对象时,您必须考虑到字符串常量语法(如 RegExp 语法)将 \ 视为特殊字符:

alert(/^\d{4}$/.test(obj.value)+" "+(new RegExp("^\\d{4}$")).test(obj.value));

应该会工作得更好。请注意字符串版本中的 \\ 而不是单个 \

当你遇到类似的情况时会发生什么

var myRegExp = new RegExp( "blah blah \d blah blah" );

?首先,解析器必须查看表达式的低级部分,例如变量名称、= 符号、new 等。字符串常量是表达式的低级基本元素之一。解析器必须将字符串的源代码转换为运行时字符串值,这涉及读取引号之间的字符。记住,对于解析器的 string 部分来说,其中的 \d 意味着该字符串应包含“d”。 (“d”字符并不特殊,因此 \d 在字符串中确实没有做任何有趣的事情,但 \ 仍然会被“吃掉”。)

现在我们已经有了表达式的基本构建 block ,因此在运行时可以使用解析器组装的字符串值调用 RegExp 构造函数。现在,是时候进行 RegExp 语法分析了。 RegExp 解析器现在看不到 \d,因为 \ 在字符串常量的构造过程中消失了。

因此,通过将传递给 RegExp 构造函数的字符串中的 \ 加倍,可以确保单个 \ 保留到正则表达式实际解释的位置像这样。当您使用“ native ”正则表达式语法 (/.../) 时,您只需要一个 \,因为正则表达式仅解析一次。

关于javascript - 我的正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17634756/

相关文章:

正则表达式匹配单词和带撇号的单词

mysql - mySQL中更高效的词边界查询

java - 在 Java 中使用 split 时出错

javascript - 按键值对对象排序

javascript - 展开 JS 对象并转换数组

java - java 幕后对象创建(java 对象实例化)

php - 创建包含可保存和可检索内容的便签纸页面的最佳方法是什么?

javascript - 从变量中保存值

javascript - 如何从 AngularJS 中的服务调用工厂

javascript - 从 7 个输入条件中搜索以查看 json 文件