为什么这个正则表达式执行不 return 匹配

Why does this regex execution not return the match

我的正则表达式是:

let a = new RegExp("(?:https?:)?\/\/(?:www\.)?(?:facebook|fb)\.com\/(?<profile>(?![A-z]+\.php)(?!marketplace|gaming|watch|me|messages|help|search|groups)[\w.\-]+)\/?", "g")

这基本上是对 facebook here 从 facebook url.

中提取用户名的修改

我的测试字符串是https://facebook.com/peterparker,我的代码是:

a.exec("https://facebook.com/peterparker")

当我在 RegExr 中尝试这个时,它工作正常。它显示捕获的正确组 (peterparker)。

然而,当我在 Google Chrome 的控制台中尝试相同的代码时,代码 returns null:

为什么它不显示在 chrome 控制台中?

由于您是从字符串创建正则表达式,因此必须转义反斜杠。

let a = new RegExp("(?:https?:)?\/\/(?:www\.)?(?:facebook|fb)\.com\/(?<profile>(?![A-z]+\.php)(?!marketplace|gaming|watch|me|messages|help|search|groups)[\w.\-]+)\/?", "g")
console.log(a.exec("https://facebook.com/peterparker"))

内联创建没有这个问题。

let a = /(?:https?:)?\/\/(?:www\.)?(?:facebook|fb)\.com\/(?<profile>(?![A-z]+\.php)(?!marketplace|gaming|watch|me|messages|help|search|groups)[\w.\-]+)\/?/g
console.log(a.exec("https://facebook.com/peterparker"))