首页 > 解决方案 > Javascript 匹配的次数少于 n 次,即使它已明确设置为匹配 n

问题描述

好的,所以,我有这个模式

^(([0-9*\/]+)\s??){7}$

默认情况下,它应该匹配可以具有以下示例形式之一的 7 个段:

[0/2, *, 2, /]

问题是,这匹配:

在 C# 中,我只会在第一个捕获组上使用 ++,它会起作用,但是 Javascript 有一个过时的正则表达式,它缺少关键功能。

这是重现的游乐场:https ://regex101.com/r/Pk23dV/1

标签: javascriptregex

解决方案


(([0-9*\/]+)\s??){7}$模式是^((a)b?){x}$其中a部分是强制性的并且b部分是可选的类型。也就是说,{7}正则表达式中的量词意味着必须至少出现七次与[0-9*\/]模式匹配的字符,无论是连续的还是用空格分隔的。

如果您想在部分\s之间编写一个必须的表达式[0-9*\/]+,您可以使用

^[0-9*\/]+(?:\s[0-9*\/]+){6}$
^(?:([0-9*\/]+)(?:\s(?!$)|$)){7}$

请参阅正则表达式演示 1正则表达式演示 2

正则表达式详细信息

  • ^- 字符串的开始
  • [0-9*\/]+(?:\s[0-9*\/]+){6}- 一位或多位数字,/*然后出现六次空格,然后是一位或多位数字,/*
  • (?:([0-9*\/]+)(?:\s(?!$)|$)){7}- 七次出现一个或多个数字,/或者*如果不在字符串末尾或字符串末尾,则后跟一个空格
  • $- 字符串结束。

推荐阅读