在JavaScript正则表达式中设置强制组
我的字符串要求是m+/-n.n。它将接受字符串m加号(+)或减号(-)的任何整数或小数。i、 e,m+1,m+1,n+0.1,m+1.1,类似于负号(-) 我尝试使用正则表达式模式在JavaScript正则表达式中设置强制组,javascript,regex,regex-group,Javascript,Regex,Regex Group,我的字符串要求是m+/-n.n。它将接受字符串m加号(+)或减号(-)的任何整数或小数。i、 e,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。要将这两个组转换为一个组,并将其设置为必填项。您可以使用匹配项匹配M或M和+或- 然后在第1组中捕获匹
“^(?:m | m)[+-](\\d{1,})(\\.\\d{1,0})$”
这里的问题是,它也接受“m+”或“m-”,这不应该是。这里,在[+-]之后有两个组,它们都是单独可选的,需要支持.1、0.1、1、1.1。要将这两个组转换为一个组,并将其设置为必填项。您可以使用匹配项匹配M或M和+或- 然后在第1组中捕获匹配的0+数字、可选点和1+数字 这样就有了一个单独的捕获组,这不是可选的,因此像
m-
这样的字符串本身就不匹配
^[Mm][+-](\d*\.?\d+)$
解释
字符串的开头^
匹配M或M[Mm]
匹配+或-[+-]
捕获组1(
匹配0+位,可选\d*\?\d+
和1+位
关闭第1组)
字符串结尾$
注意在示例中,此
\d{1,0}
无效。一种方法是在两个组之前添加一个前瞻:
^(?:m|M)[+-](?=[\d.])(\d+)?(\.\d+)?$
在这里,我添加了(?=[\d.])
,它断言在[+-]
之后必须有
或\d
,但不使用它,因为它应该在前瞻之后由可选组使用
您可以获得单个捕获组
[Mm][+-](\d*\.?\d+
它将与M+
或M+
匹配,但它不是组的一部分,并且组不是可选的。应该只有一个强制组权限,它将与值1.1
.1
等匹配?如果可能,为什么不呢?我添加了一个使用强制单个捕获组的解决方案。读到这个问题,我认为这是预期的结果。