2014-07-19 39 views
2

我想讓我的正則表達式在JavaScript中工作,但我遇到了問題。與正則表達式匹配的字符串給出null即使它應該匹配

代碼

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

console.log(res); 

然而,水庫一直在控制檯null

這是非常有趣的,因爲正則表達式應該工作。

我的問題:那麼,匹配字符串和正則表達式的正確語法是什麼?

(如果它的事項,並可能在任何對環境的說:這個代碼是從Express.jsNode.js應用程序所做的app.get面向視圖),因爲你使用一個字符串來建立你的正則表達式

回答

3

,你需要轉義\。它目前正在努力逃避d,這不需要轉義。

你可以看到,如果你創建你的鉻控制檯上的正則表達式會發生什麼:

new RegExp('978\d{10}'); 
// => /978d{10}/ 

注意,沒有\d,只有d,讓你的正則表達式匹配978dddddddddd。也就是說,文字'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"] 
2

您需要用雙反斜線逃避,如果你使用正則表達式的構造函數:

var reg = new RegExp('978\\d{10}'); 
documentation

報價:

當USI在構造函數中,正常字符串轉義規則(在包含在字符串中時在\之前的特殊字符)是必需的。例如,以下是等效的:

var re = /\w+/; 
var re = new RegExp("\\w+"); 
相關問題