2015-03-31 74 views
0

我有以下的正則表達式

(?<=\.)\S+$ 

用於提取擴展名(在最後無論發生什麼事點)的一個字符串。 regex101.com似乎接受我的正則表達式:字符串擴展名正確匹配。當我將其移動到一個javascript腳本,並嘗試測試對一個字符串我得到這個錯誤:

Invalid regular expression: /(?<=\.)\S+$/: Invalid group 

我得到同樣的錯誤也regex101自動生成的代碼:

var re = /(?<=\.)\S+$/; 
var str = 'test.txt'; 
var m; 

if ((m = re.exec(str)) !== null) { 
    if (m.index === re.lastIndex) { 
     re.lastIndex++; 
    } 
    // View your result using the m-variable. 
    // eg m[0] etc. 
} 

看小提琴HERE

任何提示?

+1

只要在regex101的左上部分中提到未來,它就會說「口味」你可以選擇Javascript而不是PCRE來查看後面的內容是無效的 – m0meni 2015-03-31 13:58:57

+0

謝謝,我從來沒有注意到 – BeNdErR 2015-03-31 14:01:09

回答

4

您不能在JavaScript正則表達式中使用後視圖。有一些JavaScript look-behind workarounds,但他們都有自己的障礙。爲了安全起見,請使用捕獲組。在這裏,你所需要的內容,將在第2組:

(\.)([^.]+)$ 

或者,只有1捕獲組(以提高性能):

\.([^.]+)$ 

代碼:

var re = /\.([^.]+)$/; 
 
var str = 'test.txt'; 
 
var m; 
 

 
if ((m = re.exec(str)) !== null) { 
 
    if (m.index === re.lastIndex) { 
 
     re.lastIndex++; 
 
    } 
 
    alert(m[1]); 
 
}

+0

你不需要一個圍繞'.'的捕獲組.......... – hwnd 2015-03-31 13:50:51

+0

否,我不:)這只是爲了說明。 – 2015-03-31 13:51:25

+0

不知道,謝謝。有沒有關於這方面的任何文件? – BeNdErR 2015-03-31 13:57:50