JavaScript正则表达式简写与Regexp(string)正则表达式的区别

3

我有两个表达式,一个是使用简短的正则表达式格式,另一个是使用字符串创建的RegExp对象。我认为它们应该都是正确的,但事实并非如此。

/^key$|^key([;,]\skey)+$/.test('key, key; key') //true

var rgxStr = '^key$|^key([;,]\skey)+$'; //
(new RegExp(rgxStr)).test('key, key; key'); //false

发生了什么事情?

2个回答

3

请看这里:

var rgxStr = '^key$|^key([;,]\skey)+$';
//                           ^ whoa, a backslash!

在正则表达式字面量中,JavaScript 会将反斜杠解释为正则表达式的一部分。
在普通字符串字面量中,JavaScript 不知道如何处理 \s 并且会舍弃反斜杠。

为了解决这个问题,在字符串字面量中需要转义反斜杠:

var rgxStr = '^key$|^key([;,]\\skey)+$';

2

一旦你在字符串中定义正则表达式,你就必须转义反斜杠。

var rgxStr = '^key$|^key([;,]\\skey)+$';

哈,就是这样。晚上编程的双刃剑。 - QueueHammer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接