Javascript regex在应该返回true时返回false
我有一个正则表达式:Javascript regex在应该返回true时返回false,javascript,regex,Javascript,Regex,我有一个正则表达式: regex = new RegExp("\${") 这个字符串: path = "${wf:conf('oozie.wf.application.path')}/workflows/core" 当我根据regexp测试字符串时: regex .test(path) 它返回false,为什么?您需要使用double\来创建\${,因为\是字符串文字转义字符 您需要一个字符串\${作为正则表达式,用字符串文字表示\,您需要使用\\,因为单个\将起到转义符号的作用 rege
regex = new RegExp("\${")
这个字符串:
path = "${wf:conf('oozie.wf.application.path')}/workflows/core"
当我根据regexp测试字符串时:
regex .test(path)
它返回false,为什么?您需要使用double
\
来创建\${
,因为\
是字符串文字转义字符
您需要一个字符串\${
作为正则表达式,用字符串文字表示\
,您需要使用\\
,因为单个\
将起到转义符号的作用
regex = new RegExp("\\${")
您需要使用double
\
来创建\${
,因为\
是字符串文字转义字符
您需要一个字符串\${
作为正则表达式,用字符串文字表示\
,您需要使用\\
,因为单个\
将起到转义符号的作用
regex = new RegExp("\\${")
您的正则表达式相当于
${
。也就是说,您正在查找字符串的结尾,后面跟着一个永远不会匹配的{
就像在正则表达式中一样,在字符串文本中使用\
来转义特殊字符或创建特殊转义序列
> 'foo\'bar'
"foo'bar"
但是,如果试图转义非特殊字符或创建无效转义序列,则只会丢弃反斜杠:
> 'foob\ar'
"foobar"
这意味着,如果使用字符串文字来构造正则表达式,并且希望将反斜杠“向前”到表达式,则还必须对其进行转义:
new RegExp("\\${")
您只需在控制台中创建表达式并说服自己:
> RegExp("\${")
/${/
> /${/
/${/
> RegExp("\\${")
/\${/
> /\${/
/\${/
使用正则表达式文字更简单:
var regex = /\${/;
您的正则表达式相当于
${
。也就是说,您正在查找字符串的结尾,后面跟着一个永远不会匹配的{
就像在正则表达式中一样,在字符串文本中使用\
来转义特殊字符或创建特殊转义序列
> 'foo\'bar'
"foo'bar"
但是,如果试图转义非特殊字符或创建无效转义序列,则只会丢弃反斜杠:
> 'foob\ar'
"foobar"
这意味着,如果使用字符串文字来构造正则表达式,并且希望将反斜杠“向前”到表达式,则还必须对其进行转义:
new RegExp("\\${")
您只需在控制台中创建表达式并说服自己:
> RegExp("\${")
/${/
> /${/
/${/
> RegExp("\\${")
/\${/
> /\${/
/\${/
使用正则表达式文字更简单:
var regex = /\${/;
你能解释一下为什么我要用双斜杠吗?我用一个来转义
$
,为什么是第二个
让我们再举一个例子。“\n”
是字符串中的转义序列,生成换行符。要生成字符串中的序列\n
(反斜杠,然后是n
),需要转义反斜杠:“\\n”
。要生成与字符串\n
匹配的正则表达式(反斜杠,n
),不能使用new RegExp(“\\n”)
,因为这将使新RegExp成为\
和n
(字符串转义的结果);但regexp再次将\
和n
解释为换行符。因此,您需要双重转义:一次告诉字符串您需要一个文字反斜杠,另一次说服regexp您也需要一个文字反斜杠。因此,要匹配反斜杠后接n
,您需要执行以下操作:
new Regexp("\\\\n")
这相当于
/\\n/
如果
console.log(foo)
// => \n
在您的示例中,转义的不是反斜杠,而是美元;只有regexp需要对其进行转义。但您需要确保转义美元的反斜杠在字符串文字的转义机制中仍然有效:
"\\$"
将包含两个字符:反斜杠和$
,以及regexp构造形式。它将等效于/\$/
。但如果以字符串“\$”
开头,则它等效于“$”
,因为美元不需要在常规字符串中转义;由它生成的regexp将匹配行尾,而不是美元符号
你能解释一下为什么我要用双斜杠吗?我用一个来转义
$
,为什么是第二个
让我们再举一个例子。“\n”
是字符串中的转义序列,生成换行符。要生成字符串中的序列\n
(反斜杠,然后是n
),需要转义反斜杠:“\\n”
。要生成与字符串\n
匹配的正则表达式(反斜杠,n
),不能使用new RegExp(“\\n”)
,因为这将使新RegExp成为\
和n
(字符串转义的结果);但regexp再次将\
和n
解释为换行符。因此,您需要双重转义:一次告诉字符串您需要一个文字反斜杠,另一次说服regexp您也需要一个文字反斜杠。因此,要匹配反斜杠后接n
,您需要执行以下操作:
new Regexp("\\\\n")
这相当于
/\\n/
如果
console.log(foo)
// => \n
在您的示例中,转义的不是反斜杠,而是美元;只有regexp需要对其进行转义。但您需要确保转义美元的反斜杠在字符串文字的转义机制中仍然有效:
"\\$"
将包含两个字符:反斜杠和
$
,以及regexp构造形式。它将等效于/\$/
。但如果以字符串“\$”
开头,则它等效于“$”
,因为美元不需要在常规字符串中转义;用它生成的regexp将匹配行尾,而不是美元符号。您能解释一下为什么我应该使用双斜杠吗?我使用一个来转义$
,为什么是第二个?@Maximus来转义\n您能解释一下为什么我应该使用双斜杠吗?我使用一个来转义吗$
,为什么是第二个?@Maximus要转义\您仍然需要转义文本/\${/
中的美元符号。您仍然需要转义文本/\${/
中的美元符号