Javascript组合2个正则表达式

Javascript组合2个正则表达式,javascript,regex,Javascript,Regex,我有几个正则表达式,我计划合并。 因此,第一个正则表达式如下所示(允许使用特定的千位和十进制分隔符的金额) 我有类似的其他正则表达式(基于不同的区域设置,例如,另一个将逗号作为十进制分隔符) 因此,对于上面的正则表达式,以下是有效/无效值 123.11 (Valid) 1'23 (Invalid) 1234567890123 (Valid - 13 digits) 12345678901234 (Invalid - 14 digits) 1234567890.123 (Valid as 13

我有几个正则表达式,我计划合并。 因此,第一个正则表达式如下所示(允许使用特定的千位和十进制分隔符的金额)

我有类似的其他正则表达式(基于不同的区域设置,例如,另一个将逗号作为十进制分隔符)

因此,对于上面的正则表达式,以下是有效/无效值

123.11 (Valid)
1'23 (Invalid)
1234567890123 (Valid - 13 digits)
12345678901234 (Invalid - 14 digits)
1234567890.123 (Valid as 13 digits...10.3)
1234567890.1234 (Invalid as 14 digits...10.4)
对于第二个正则表达式,我希望字符串最多可以包含13位数字(包括小数点之前或之后)

对于上述正则表达式,以下是有效/无效值

123.11 (Valid)
1'23 (Invalid)
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;    


详细信息

因为,否则我必须编写一些额外的逻辑,以针对当前常用正则表达式验证方法中的两个单独正则表达式进行验证…我尝试不接触该方法,而是使用一个合并正则表达式进行验证…为什么不直接执行
regex1.test(value)和®ex2.test(value)
?我不明白为什么要动态地组合它们。这是可能的,但容易出错,而且比简单地使用两者困难得多。事实上,有很多事情……但我使用了cp验证库并设置了我的对象,然后有了一个通用/自定义的regex mixin,在那里我有逻辑……所以,有点难以解释为什么我不能直接进行检查…这似乎正是我想要的…我现在将测试所有的值…但再次,这似乎是完美的。谢谢你的回答,是吗?@Edward不,这与你的模式相去甚远。它没有冗余的
(?=)
lookahead,包含一个更有效的
\D
构造来匹配任何非数字字符,展示了一种技术,如何在不改变第一个正则表达式的情况下保持一种模式并用另一种模式限制它。fancy,引擎
\D
在编译时被其类
[^\D]
替换
(?=)
(?=[^\d]*(?:\d[^\d]*){0,13}$)
是一个字符,当他使用的跟随者表达式包含OP不太了解的所有可选术语时,该字符存在。我把它改成了
(?=[^\d]*(?:\d[^\d]*){1,13}$)
,谁在乎它是不是留在里面了。最后,有一种trgex技术将我的模式与另一个ots上的模式结合起来,称为字符串连接。正确的英语单词是prefix而不是prepend。