Javascript 将字符串与正则表达式匹配会得到null,即使它应该匹配

Javascript 将字符串与正则表达式匹配会得到null,即使它应该匹配,javascript,regex,Javascript,Regex,我试图让我的正则表达式在JavaScript中工作,但我有一个问题 代码: var reg = new RegExp('978\d{10}'); var isbn = '9788740013498'; var res = isbn.match(reg); console.log(res); 但是,在控制台中res总是null 这很有趣,因为正则表达式应该可以工作 我的问题:那么,匹配字符串和正则表达式的正确语法是什么 (如果它很重要并且在环境中有发言权:此代码取自应用程序。在我的节点.js应

我试图让我的正则表达式在JavaScript中工作,但我有一个问题

代码

var reg = new RegExp('978\d{10}');
var isbn = '9788740013498';
var res = isbn.match(reg);

console.log(res);
但是,在控制台中res总是
null

这很有趣,因为正则表达式应该可以工作

我的问题:那么,匹配字符串和正则表达式的正确语法是什么


(如果它很重要并且在环境中有发言权:此代码取自
应用程序。在我的
节点.js
应用程序的
Express.js
中创建的
视图)

因为您使用字符串构建正则表达式,所以需要转义
\
。它目前正在对
d
进行转义,这不需要转义

如果在chrome控制台上创建正则表达式,您可以看到会发生什么:

new RegExp('978\d{10}');
// => /978d{10}/
请注意,没有
\d
,只有
d
,因此您的正则表达式匹配
978dddddddd
。也就是说,文本
'd'
字符重复了10次

您需要使用
\\
在构建正则表达式的字符串中插入一个文本
\

var reg = new RegExp('978\\d{10}'); 
var isbn = '9788740013498';
var res = isbn.match(reg);

console.log(res)

// => ["9788740013498", index: 0, input: "9788740013498"] 

如果使用RegExp构造函数,则需要使用双反斜杠进行转义:

var reg = new RegExp('978\\d{10}');
引自:

使用构造函数时,需要常规字符串转义规则(字符串中包含的特殊字符前面带有\时)。例如,以下是等效的:

var re = /\w+/;
var re = new RegExp("\\w+");