Javascript 正则表达式群划分问题
我有这个问题… 我有一个必须确认的字符串,用户可以插入以正负号作为分隔符的百分比串联(最大百分比数为5): 第一个符号是可选的,因此前面的输入也应写为:Javascript 正则表达式群划分问题,javascript,asp.net,regex,Javascript,Asp.net,Regex,我有这个问题… 我有一个必须确认的字符串,用户可以插入以正负号作为分隔符的百分比串联(最大百分比数为5): 第一个符号是可选的,因此前面的输入也应写为: 33.22+10.22+11.22+4.43+4.43 我写了这个正则表达式: ^(([+-]?\d{1,2}\.\d{1,2})|([+-]?\d{1,3}))(([+-]\d{1,2}\.\d{1,2})|([+-]\d{1,3})){0,4}$ 当我收到一根火柴时,它就起作用了 问题(如图所示)是我还需要组,输入的内部部分始终被视为
33.22+10.22+11.22+4.43+4.43
我写了这个正则表达式:
^(([+-]?\d{1,2}\.\d{1,2})|([+-]?\d{1,3}))(([+-]\d{1,2}\.\d{1,2})|([+-]\d{1,3})){0,4}$
当我收到一根火柴时,它就起作用了
问题(如图所示)是我还需要组,输入的内部部分始终被视为一个组(+10.22+11.22+4.43)
我不想重复这样的原子表达式:
^(([+-]?\d{1,2}\.\d{1,2})|([+-]?\d{1,3}))(([+-]\d{1,2}\.\d{1,2})|([+-]\d{1,3}))(([+-]\d{1,2}\.\d{1,2})|([+-]\d{1,3}))(([+-]\d{1,2}\.\d{1,2})|([+-]\d{1,3}))(([+-]\d{1,2}\.\d{1,2})|([+-]\d{1,3}))$
但是我想使用量词,因为我有一些页面使用了5%和6%
谢谢大家您无法捕获p的所有迭代 在JS正则表达式中,您可以分两步进行:1)测试有效性,2)提取所有匹配项(如果有效)
if (/^(?:[+-]?(?:\d{1,2}\.\d{1,2}|\d{1,3})\b){1,5}$/.test(s)) {
return s.match(/[+-]?\d+(?:\.\d+)?/g);
}
详细信息
-字符串的开头^
-1到5次重复(?:[+-]?(?:\d{1,2}.\d{1,2}.\d{1,3})\b){1,5}
-可选的[+-]?
或+
-
-一个与(?:\d{1,2}\.\d{1,2}|\d{1,3})
-1或2位,\d{1,2}\.\d{1,2}
和1或2位
-或|
-1、2或3位数字\d{1,3}
-单词边界\b
-字符串结束$
.match(/[+-]?\d+(?:\.\d+)/g
从验证字符串中提取-
/+
-1+位-可选
和1+位模式之后的所有子字符串
演示:
var s=“+33.22+10.22+11.22+4.43+4.43”;
如果(/^(?:[+-]?(?:\d{1,2}\.\d{1,2}| \d{1,3})\b){1,5}$/.test){
log(s.match(/[+-]?\d+(?:\。\d+)?/g));
}
您可以执行regex.match(str)
在循环中,直到您耗尽输入。regex对象是有状态的,因此它可以找到您的模式,记住位置,下一次调用将找到下一个匹配项,依此类推。但我不知道这是否适用于您。您无法捕获重复捕获组的所有迭代。您可以在JS regex中分两步执行:1)测试有效性,2)提取所有匹配项(如果有效)。类似于if(/^(?:[+-]?(?:\d{1,2}.\d{1,2}.\d{1,3})\b)*$/.test(s)){返回s.match(/[+-]?\d+)(?:\.\d+);}
为什么用asp.net
标记?你希望得到什么答案?因为我使用的是asp.net web表单,但我使用的是javascript中的正则表达式,…也许有一些c#方法不同于javascript方法,它的工作方式不同,以不同的方式划分组是的,所以你需要一个c#解决方案,比如Regex.Match(s,@“^([+-])(?:\d{1,2}\\d{1,2}\d{1,3}\b)*$)
?您错过了必须最大为5的部分items@Lorenzo这是这里最小的麻烦。将*
替换为{1,5}
。我正在边缘控制台,即控制台,regex101.com上进行测试,但它不起作用是的。。。我的fault@Lorenzo如果您想加快测试速度,可以使用jsfiddle.net或ideone.com服务与我共享。
if (/^(?:[+-]?(?:\d{1,2}\.\d{1,2}|\d{1,3})\b){1,5}$/.test(s)) {
return s.match(/[+-]?\d+(?:\.\d+)?/g);
}