javascript - 正则表达式后向 : Invalid regular expression:/(? <=\.)\S+$/: 无效组

标签 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.
}

参见 fiddle HERE

有什么提示吗?

最佳答案

您不能在 JavaScript 正则表达式中使用后视。有一些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]);
}

关于javascript - 正则表达式后向 : Invalid regular expression:/(? <=\.)\S+$/: 无效组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29370007/

相关文章:

javascript - 正则表达式为 html 属性加上引号

javascript - 使用正则表达式转换 JS 中的多项式字符串表示形式

javascript - (Javascript) 来自嵌入代码的 YouTube 视频 ID - 正则表达式?

javascript - 在javascript中转义双引号

javascript - 单击链接后无法渲染 react 组件

javascript - 获取contenteditable span的值

c# - 如何判断一个 html 字符串是否会在浏览器中显示为空? (C#/正则表达式?)

regex - 括号匹配作为数组 (Perl)

javascript - 如何在for循环中添加 "arr[i]"?

javascript - 在下拉 javascript 菜单中居中链接