2016-01-24 64 views
0
var str = "^" + "/post/\d+" + "$"; 
var regex = new RegExp(str); 
var flag = regex.test("/post/3333"); 

console.log(flag) // -> false 
console.log(regex) // -> /^\/post\/d+$/ 

我期待結果成真,但會導致錯誤。我需要JavaScript代碼中的正則表達式的幫助

我認爲問題是「/」在創建RegExp實例時在「/」之前自動添加。

我應該怎麼寫才能使它工作?

+5

當使用'RegExp'構造函數,你需要躲避反斜線的兩倍。一次爲字符串,然後爲正則表達式。使用'「^」+「/ post/\\ d +」' – Tushar

+0

您打印出'regex'的值 - 良好的調試技巧!一旦你這樣做了,問題就是盯着你。你會看到它說'/^\/post \/d + $ /'。請注意,斜槓已被轉換爲'\ /',但是'd'沒有前面的反斜槓!所以它只會匹配一個實際的'd'!這對你開始瞭解正在發生的事情來說是一個很好的線索。 – 2016-01-24 07:38:10

回答

0

這種格式的工作這裏有一個更具體的正則表達式來匹配/post/####的格式:

var regex = /\/post\/[0-9]+$/; 
var flag = regex.test("/post/3333"); 

這樣會測試字符串/post/後跟一個或多個數字,出現在行尾。

enter image description here

同樣:

var regex = /\/post\/[0-9]{4}$/; 
var flag = regex.test("/post/3333"); 

將測試字符串/post/接着4位數字,在該行的末尾發生。

enter image description here

+0

第二張圖像說4的「3倍」intead,是故意的嗎? – SeinopSys

+1

是的,除了第一次,還有3次。所以它只匹配一次,然後再匹配3次。乍一看令人困惑。 –

1

你不需要new RegExp構造和字符串 這裏例如

var regex = /post\/\d+$/; 
var flag = regex.test("/post/3333"); 

我刪除^標誌,因爲正則表達式不會輸入「網站/後/ 3333」

+0

我需要新的RegExp構造函數,因爲我有一個變量,我想在正則表達式文字中進行擴展。 – hytm