Regexp奇怪地没有工作

时间:2015-04-04 17:39:29

标签: javascript regex string node.js

我在里面用regexp测试了下面的代码,控制台日志打印为null。这是代码:

var decRegexp = new RegExp("[0-9]{2}-(\\n)*\s*[A-Z]{1,3}-(\\n)?\s*[0-9]{2,3}", "g");
var textToTest = "n° 14-\n      DCC-71 du du 4 juin 2014"
var decisionNumberMatches = textToTest.match(decRegexp);
console.log(decisionNumberMatches);

说真的,我不明白为什么它没有给我回复“n°14- \ n DCC-71 du du 2014年4月”。我在http://jsregex.com/上测试了这个正则表达式并且它有效,所以也许这是nodejs的奇怪行为。

2 个答案:

答案 0 :(得分:4)

string literal中的\必须转发为\\

这就是为什么你不应该使用字符串从常量表达式创建正则表达式的原因之一。

使用regular expression literal

var decRegexp = /[0-9]{2}-(\\n)*\s*[A-Z]{1,3}-(\\n)?\s*[0-9]{2,3}/g;

(另一个原因是你用正则表达式文字得到了更好的表现)

答案 1 :(得分:0)

RegExp对象要求您双重转义转义序列,因此请使用:

var decRegexp = new RegExp("[0-9]{2}-(\\n)*\\s*[A-Z]{1,3}-(\\n)?\\s*[0-9]{2,3}", "g");