JavaScript正则表达式/速记/ vs Regexp(字符串)

时间:2013-04-12 04:10:06

标签: javascript regex

我认为我在sorthand正则表达式格式中使用的是相同的表达式,另一种是带有字符串的RegExp对象。我希望它们都是真的,但那不是我所看到的。

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

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

发生了什么事?

2 个答案:

答案 0 :(得分:3)

看这里:

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

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

要修复它,请在字符串文字中转义反斜杠:

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

答案 1 :(得分:2)

只要在字符串中定义regexp - 就必须转义反斜杠

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