我有几个正则表达式,我打算将它们结合起来。
所以第一个正则表达式如下(允许带有特定千位和小数分隔符的金额)
"^-?(\\d+|\\d{1,3}(,\\d{3})*)?(\\.(\\d+)?)?$"
我有类似的其他正则表达式(基于不同的语言环境,例如另一个将逗号作为小数分隔符)
因此,使用上述正则表达式,以下是有效/无效值
123.11 (Valid)
1'23 (Invalid)
使用第二个正则表达式,我希望字符串最多可以包含 13 位数字(包括小数点之前或之后)
^[^\\d]*?(\\d|\\d[^\\d]+){0,13}$
使用上述正则表达式,以下是有效/无效值
1234567890123 (Valid - 13 digits)
12345678901234 (Invalid - 14 digits)
1234567890.123 (Valid as 13 digits...10.3)
1234567890.1234 (Invalid as 14 digits...10.4)
是否有可能以某种方式巩固 2 正则表达式?
但是,我不想触及第一个正则表达式(根据不同的语言环境有不同的组合)。但是以某种方式将第二个正则表达式动态附加到第一个正则表达式中会很好吗?
所以,我对第二个正则表达式很灵活,因为它不基于任何语言环境,但将始终相同,主要验证字符串中最多 13 位数字。
然后,我将使用合并的正则表达式验证我的字符串。
最佳答案
您可以保持第一个模式不变,并在它前面加上
(?=^\D*(?:\d\D*){0,13}$)
(?=^\D*(?:\d\D*){0,13}$)
模式表示与紧随其后的位置匹配的正向前瞻^
- 字符串开头 \D*
- 0+ 非数字 (?:\d\D*){0,13}
- 数字出现 0 到 13 次,后跟非数字字符 $
- 字符串结束。 完整的 JavaScript 正则表达式定义:
var regex1 = "^-?(\\d+|\\d{1,3}(,\\d{3})*)?(\\.(\\d+)?)?$"; // Not to be touched
var consolidated_regex = "(?=^\\D*(?:\\d\\D*){0,13}$)" + regex1;
见 full regex demo .
详情
关于Javascript结合2个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62454156/