在 Chrome 中工作,但在 Safari 中中断:无效的正则表达式:无效的组说明符名称 /(?<=\/)([^#]+)(?=#*)/

2022-08-30 05:14:22

在我的Javascript代码中,这个正则表达式在Chrome中工作正常,但在safari中,我得到:/(?<=\/)([^#]+)(?=#*)/

正则表达式无效:组说明符名称无效

有什么想法吗?


答案 1

看起来 Safari 还不支持 lookbehind(即你的 )。一种替代方法是将前面的内容放在未捕获的组中,然后仅提取第一个组(之后和之前的内容)。(?<=\/)//#

/(?:\/)([^#]+)(?=#*)/

此外,是奇怪的 - 您可能希望预先查找某些内容(例如或字符串的末尾),而不是量词(个或多个出现的)。最好使用类似的东西(?=#*)#*#

/(?:\/)([^#]+)(?=#|$)/

或者只是完全省略前瞻(因为贪婪),这取决于你的情况。([^#]+)


答案 2

只是想把这个放在那里给任何偶然发现这个问题的人,找不到任何东西......

我遇到了同样的问题,结果发现它是我的一个依赖项中的正则表达式,即Discord.js。

幸运的是,我不再需要那个软件包,但如果你这样做,请考虑在那里放一个问题或其他东西(也许你甚至不应该在你的前端react应用程序中运行discord.js)。