在JavaScript正则表达式中设置强制组 Regex Demo

问题描述

我的字符串要求是m +/- n.n。它将接受字符串m加号(+)或减号(-)任何整数或十进制数。即m + 1,m + .1,n + 0.1,m + 1.1,与减号(-)相似。

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

这里的问题是它也在接受'm +'或'm-',但不应接受。这里,在[+-]之后有两个组,两个组都是单独可选的,需要支持0.1、0.1、1、1.1。希望将这两个组转换为一组并强制执行。

解决方法

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

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

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

Regex Demo

,

您可以使用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}无效。