2015-03-31 76 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