我有我认为相同的表达式,一个是 sorthand 正则表达式格式,另一个是带有字符串的 RegExp 对象。我希望它们都是真的,但这不是我所看到的。
/^key$|^key([;,]\skey)+$/.test('key, key; key') //true
var rgxStr = '^key$|^key([;,]\skey)+$'; //
(new RegExp(rgxStr)).test('key, key; key'); //false
到底是怎么回事?
我有我认为相同的表达式,一个是 sorthand 正则表达式格式,另一个是带有字符串的 RegExp 对象。我希望它们都是真的,但这不是我所看到的。
/^key$|^key([;,]\skey)+$/.test('key, key; key') //true
var rgxStr = '^key$|^key([;,]\skey)+$'; //
(new RegExp(rgxStr)).test('key, key; key'); //false
到底是怎么回事?
看这里:
var rgxStr = '^key$|^key([;,]\skey)+$';
// ^ whoa, a backslash!
在正则表达式文字中,JavaScript 将该反斜杠解释为正则表达式的一部分。
在普通的字符串文字中,JavaScript 不知道如何处理\s
并丢弃反斜杠。
要修复它,请在字符串文字中转义反斜杠:
var rgxStr = '^key$|^key([;,]\\skey)+$';
一旦您在字符串中定义正则表达式 - 您必须转义反斜杠
var rgxStr = '^key$|^key([;,]\\skey)+$';