正则表达式 /(?<=(#\S*))&?menu=[^&]*/ 在部分电脑上出现报错问题?望大佬解答

问题描述

在开发中有这样一个需求:
f/personal_center.html?pc=true#menu=myShopList 这类链接中获取 #menu=xxxx 这一串字符串,要求:
1.必须在 # 后的 menu=xxx 才可以获取
2.获取 menu=xxx 这种模式,末尾由 & 拼接的其他参数不获取

问题出现的环境背景及自己尝试过哪些方法

根据以上需求,我自己写了/(?<=(#\S*))&?menu=[^&]*/这个正则进行获取,在本机和多台机子上都可以使用,但有个别电脑无法识别改正则表达式,报错显示“无效正则表达式”。这部分电脑将(?<=(#\S*))中的?变为\?掉就不会报错了,但这么修改后该正则的功能就变了。所以想询问大佬是什么问题会导致这种情况?

ps:在出问题的电脑上使用各大主流浏览器测试,都报错。

相关代码

测试用例:f/personal_center.html?pc=true#menu=myShopList
正则表达式:/(?<=(#\S*))&?menu=[^&]*/

望大佬解答

1.是什么问题导致这种情况?
2.是正则本身的问题?
3.若是正则的问题,如何修改?

阅读 1.9k
1 个回答

js不支持负向零宽断言,只支持正向零宽断言。即js不支持(?<exp)但支持(?!exp)
如果只需要menu后的直接获取#menu后的就行了
/#menu=([^&]+)/ 分组1就是匹配的值

可能明年就能支持了
https://github.com/tc39/propo...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题