正则表达式后视:无效的正则表达式:/(?< =。。)\ S + $ /:无效的组

时间:2015-03-31 13:35:33

标签: javascript regex

我有以下正则表达式

(?<=\.)\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

任何提示?

2 个答案:

答案 0 :(得分:4)

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

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

或者,只有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]);
}

答案 1 :(得分:0)

由于babel-loader错误

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