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

tec*_*000 7 javascript regex safari

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

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

有任何想法吗?

Cer*_*nce 15

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

/(?:\/)([^#]+)(?=#*)/
Run Code Online (Sandbox Code Playgroud)

此外,(?=#*)很奇怪 - 您可能希望预测某些事物(例如#字符串的结尾),而不是*量词(零次或多次出现#).使用类似的东西可能更好

/(?:\/)([^#]+)(?=#|$)/
Run Code Online (Sandbox Code Playgroud)

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

  • 将此添加到一长串的东西中,以攻击那些声称 Safari 不是新的 Internet Explorer 的人。 (17认同)
  • 怎么在两年多之后仍然不支持..无论如何,为修复伙伴干杯! (8认同)
  • 天啊,这让我免于数小时的痛苦!在本机反应中收到“无效的组说明符名称,没有堆栈”,不知道在哪里查找!基于此简单搜索“(?”就找到了。谢谢! (4认同)
  • 伙计我怎么感谢你?这个问题是在生产中出现的,我没有 MAC 来测试。有人向我读了该错误,你提供了帮助。谢谢啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!! (2认同)
  • @AramBecker 是的,它们都是基于 Webkit 构建的。如果苹果允许其他引擎在其操作系统上运行,那么其他一些(或全部)引擎现在很可能会支持它。 (2认同)

GMK*_*ain 5

正则表达式?<=不支持 Safari iOS,我们可以使用?:\n注意:/或非捕获组中之前出现的第一个推荐信

\n

查看详细信息: https: //caniuse.com/js-regexp-lookbehind

\n

\r\n
\r\n
let str = "Get from Slash/to Next hashtag #GMK"\n\n\nlet workFineOnChromeOnly = str?.match(/(?<=\\/)([^#]+)(?=#*)/g)\nconsole.log("\xe2\x9d\x8c Work Fine On Chrome Only", workFineOnChromeOnly )\n\n\nlet workFineSafariToo = str?.match(/(?:\\/)([^#]+)(?=#*)/g)\nconsole.log("\xe2\x9c\x94\xef\xb8\x8f Work Fine Safari too", workFineSafariToo )
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n