regex look-behind:无效的正则表达式:/(?<=.)S+$/:无效的组

regex look-behind: Invalid regular expression: /(?<=.)S+$/: Invalid group

本文关键字:无效 正则表达式 look-behind regex lt      更新时间:2023-09-26

我有以下regexp

(?<='.)'S+$

用于提取字符串的扩展名(最后一个点之后的任何扩展名)regex101.com似乎接受了我的regexp:字符串扩展名匹配正确。当我把它移到一个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.
}

请参阅小提琴此处

有什么提示吗?

您不能在JavaScript正则表达式中使用look-behinds。有一些JavaScript外观的变通方法,但它们都有自己的障碍。为了安全起见,请使用捕获组。在这里,您需要的内容将在第二组中:

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

或者,只有一个捕获组(以提高性能):

  '.([^.]+)$

代码:

var re = /'.([^.]+)$/; 
var str = 'test.txt';
var m;
if ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    alert(m[1]);
}

由于babel加载器错误

var re = new RegExp("(?<=''.)''S+$"); 替换var re = /(?<='.)'S+$/;