3

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

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

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

到底是怎么回事?

4

2 回答 2

3

看这里:

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

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

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

var rgxStr = '^key$|^key([;,]\\skey)+$';
于 2013-04-12T04:13:49.687 回答
2

一旦您在字符串中定义正则表达式 - 您必须转义反斜杠

var rgxStr = '^key$|^key([;,]\\skey)+$';
于 2013-04-12T04:14:07.773 回答