Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式/速记/vs Regexp(字符串)_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式/速记/vs 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 = '

我有我认为是相同的表达式,一个是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)+$';
//                           ^ whoa, a backslash!
在正则表达式文本中,JavaScript将反斜杠解释为正则表达式的一部分。
在普通字符串文本中,JavaScript不知道如何处理
\s
,并丢弃反斜杠

要解决此问题,请在字符串文本中转义反斜杠:

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

一旦在字符串中定义regexp,就必须转义反斜杠

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

哈,就是这样。这是深夜编码的双刃剑。