为什么量词不起作用

Why quantifier doesn't work

本文关键字:不起作用 量词 为什么      更新时间:2023-09-26

我有以下正则表达式:

^(?:['w]+?'/)?['w]+?@['w]+?'.['w]+?$

现在我需要将整个字符串长度限制 25 个字符:我尝试了以下方法:

^((?:['w]+?'/)?['w]+?@['w]+?'.['w]+?){0,25}$

但它仍然匹配超过 25 个字符的正则表达式,为什么?

量词应用于它前面的标记。在你的例子中,这是一个完整的组,该组可以匹配的不仅仅是一个角色。

使用肯定的前瞻断言单独执行长度检查:

^(?=.{0,25}$)(?:'w+'/)?'w+@'w+'.'w+$

如您所见,您的正则表达式也可以简化很多(不需要惰性量词和字符类)。

为什么不简单地

if ( inputStr.length <= 25 && /^(?:['w]+?'/)?['w]+?@['w]+?'.['w]+?$/.test( inputStr ) )
{
  //your logic
}

如果我们称您的原始正则表达式为 A

^(?:['w]+?'/)?['w]+?@['w]+?'.['w]+?$

那么你的下一个正则表达式可以更简单地表示为

^(A){0,25}$

因此,您不仅匹配 25 个字符,还匹配 0 到 25 次A