2014-12-02 120 views
1

我開始與this正則表達式:爲什麼RegEx必須用括號括起來才能匹配?

/<!--#\s*include\s+file=(['"])([^\r\n]+?)\1\s*-->/g 

而且我想它來搭配這兩個行:

<!--#include file="../header.html"--> 
<!--#include virtual="../header.html"--> 

在我第一次嘗試,我改變了file(file|virtual)像這樣:

/<!--#\s*include\s+(file|virtual)=(['"])([^\r\n]+?)\1\s*-->/g 

但是,這並不符合任何東西。一點點玩耍後,我發現,添加括號周圍的一切會得到一個匹配:

/(<!--#\s*include\s+(file|virtual)=(['"])([^\r\n]+?)\1\s*-->)/g 

我不明白爲什麼,但 - 爲什麼沒有第一修改比賽,爲什麼做多餘的括號修復?

回答

1

我想通了 - 這是在接近結束時的\1回參考 - 它應該匹配開頭(['"])與最後同樣的報價。但是當我添加一個額外的捕獲組時,它在文件路徑的末尾尋找第二個(file|virtual)

修復方法是將其更改爲\2

這是修正正則表達式:

/<!--#\s*include\s+(file|virtual)=(['"])([^\r\n]+?)\2\s*-->/g