在 JavaScript 正则表达式中创建强制组

Make mandatory group in JavaScript regex

我的字符串要求是 m+/-n.n。它将接受字符串 m 加上 (+) 或减去 (-) 任何整数或小数。即m+1,m+.1,n+0.1,m+1.1,类似减号(-)。

我尝试使用正则表达式模式 '^(?:m|M)[+-](\d{1,})?(\.\d{1,0})?$'

这里的问题是它也在接受 'm+' 或 'm-',这是不应该的。这里,[+-]后面有两组,都是单独可选的,这是支持.1,0.1,1,1.1所必需的。想把这两组合二为一,强制设置。

您可以使用 character class.

匹配 M 或 m 和 + 或 -

然后在第 1 组中捕获匹配的 0+ 个数字、一个可选的点和 1+ 个数字。

这样就有一个单独的捕获组,它不是可选的,所以像 m- 这样的字符串本身不会匹配。

^[Mm][+-](\d*\.?\d+)$

说明

  • ^ 字符串开头
  • [Mm] 匹配 M 或 m
  • [+-] 匹配 + 或 -
  • ( 捕获组 1
    • \d*\.?\d+匹配0+位,可选.和1+位
  • ) 关闭组 1
  • $ 字符串结束

Regex demo

注意在示例中,此\d{1,0}无效。

一种方法是在两组之前添加前瞻:

^(?:m|M)[+-](?=[\d.])(\d+)?(\.\d+)?$

这里我添加了(?=[\d.]),它断言在[+-]之后必须有一个.或一个\d,但不会消耗它,因为它应该在前瞻之后由可选组使用。

Regex Demo