Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript正则表达式中设置强制组_Javascript_Regex_Regex Group - Fatal编程技术网

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

在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+/-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组中捕获匹配的0+数字、可选点和1+数字

这样就有了一个单独的捕获组,这不是可选的,因此像
m-
这样的字符串本身就不匹配

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

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


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

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

^(?:m|M)[+-](?=[\d.])(\d+)?(\.\d+)?$
在这里,我添加了
(?=[\d.])
,它断言在
[+-]
之后必须有
\d
,但不使用它,因为它应该在前瞻之后由可选组使用


您可以获得单个捕获组
[Mm][+-](\d*\.?\d+
它将与
M+
M+
匹配,但它不是组的一部分,并且组不是可选的。应该只有一个强制组权限,它将与值
1.1
.1
等匹配?如果可能,为什么不呢?我添加了一个使用强制单个捕获组的解决方案。读到这个问题,我认为这是预期的结果。