正则表达式无效的量词?

Posted

技术标签:

【中文标题】正则表达式无效的量词?【英文标题】:Regex Invalid quantifier? 【发布时间】:2016-10-24 17:44:41 【问题描述】:

我正在使用带有 javascript 的正则表达式,但我遇到了一些问题,它返回给我Invalid quantifier ?

这是代码:

if(url.match(new RegExp('^https?://.+/foresee(?:-|_)surveydef\.js(?:\?)(.*)','g')) != null)

我读到了其他问题,我需要在 ? 字符之前添加一个 \ 但它不能解决它......

if(url.match(new RegExp('^https\?://.+/foresee(\?:-|_)surveydef\.js(\?:\?)(.*)','g')) != null)

输入的url是http://marvel.com/,我只是检查匹配。

【问题讨论】:

见***.com/questions/3713290/…。另外,你的输入字符串是什么?预期的行为是什么?可能存在几个问题(您正在使用带有 match 的全局修饰符的正则表达式,这意味着所有捕获的值都将丢失。 你需要避开那些斜线。而且,鉴于您似乎正在尝试匹配 URL,我建议您也转义这些点。 好的,http://marvel.com/ 不包含?。使用 \\? 无济于事。有什么要求?匹配任何网址? @WiktorStribiżew 可以匹配不同的 url。我需要检查 url 是否与正则表达式匹配。 @SebastianLenartowicz 我试过了,但错误仍然存​​在:'events\.foreseeresults\.com\/rec\/process\?(.*)','g' 【参考方案1】:

用以下代码修复它:

if(url.match(new RegExp('^https?://.+/foresee(?:-|_)surveydef\.js(\\?:\?)(.*)','g'))

【讨论】:

你在用(\\?:\?)做什么?如果您的模式是静态的,为什么还要使用 RegExp 构造函数?您的问题仍然不清楚,因为您没有提供输入和预期的输出。匹配 ? 后跟可选的 : 没有多大意义。

以上是关于正则表达式无效的量词?的主要内容,如果未能解决你的问题,请参考以下文章

bash 中的正则表达式量词——简单与扩展匹配 n 次

正则表达式之量词

在 JavaScript 正则表达式中使用 1+ 所有格量词时出现正则表达式错误

java正则表达式-量词

java正则表达式-量词

这两个正则表达式有啥区别? (理解?量词)