ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

有任何想法吗?

看来 Safari 尚不符合 2018 标准。有一个超过 4 年的错误报告 here
2022 年。Safari 仍然存在问题

G
Gleb Kemarsky

看起来像 Safari doesn't support lookbehind yet(即您的 (?<=\/))。一种替代方法是将之前出现的 / 放入未捕获的组中,然后仅提取第一个组(/ 之后和 # 之前的内容)。

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

此外,(?=#*) 很奇怪 - 您可能希望提前查找 something(例如 # 或字符串的结尾),而不是 * 量词( 或多次出现的 #)。使用类似的东西可能会更好

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

或者完全忽略前瞻(因为 ([^#]+) 是贪婪的),具体取决于您的情况。


谢谢你。我需要从 exec 结果中获取索引 1 而不是索引 0。但它有效。
伟大的!为我工作!要仅验证数字和一加信号 (+)(可能指示的电话号码),我有 /(?<=\+.*)\+/g 并更改为 /(?:\+.*)\+/g .现在它也适用于 Safari!
你能帮我使它与野生动物园兼容吗? /\B(?
@AramBecker 是的,它们都是基于 Webkit 构建的。如果 Apple 允许其他引擎在他们的操作系统上运行,那么这些其他引擎中的一些(或全部)现在很可能会支持它。
将此添加到一长串的事情中,以向声称 Safari 不是新的 Internet Explorer 的人扔东西。
S
Soviut

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

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

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