JavaScript正则表达式/速记/vs Regexp(字符串)
我有我认为是相同的表达式,一个是sorthand regex格式,另一个是带有字符串的RegExp对象。我希望他们都是真的,但这不是我所看到的JavaScript正则表达式/速记/vs Regexp(字符串),javascript,regex,Javascript,Regex,我有我认为是相同的表达式,一个是sorthand regex格式,另一个是带有字符串的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)+$/.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)+$';
一旦在字符串中定义regexp,就必须转义反斜杠
var rgxStr = '^key$|^key([;,]\\skey)+$';
哈,就是这样。这是深夜编码的双刃剑。