我有两个表达式,一个是使用简短的正则表达式格式,另一个是使用字符串创建的RegExp对象。我认为它们应该都是正确的,但事实并非如此。
/^key$|^key([;,]\skey)+$/.test('key, key; key') //true
var rgxStr = '^key$|^key([;,]\skey)+$'; //
(new RegExp(rgxStr)).test('key, key; key'); //false
发生了什么事情?
我有两个表达式,一个是使用简短的正则表达式格式,另一个是使用字符串创建的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!
\s
并且会舍弃反斜杠。
为了解决这个问题,在字符串字面量中需要转义反斜杠:
var rgxStr = '^key$|^key([;,]\\skey)+$';
一旦你在字符串中定义正则表达式,你就必须转义反斜杠。
var rgxStr = '^key$|^key([;,]\\skey)+$';