Javascript 将字符串与正则表达式匹配会得到null,即使它应该匹配
我试图让我的正则表达式在JavaScript中工作,但我有一个问题 代码: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应
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+");