Javascript结合2个正则表达式

标签 javascript regex

我有几个正则表达式,我打算将它们结合起来。
所以第一个正则表达式如下(允许带有特定千位和小数分隔符的金额)

"^-?(\\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/

    相关文章:

    javascript - 使用循环函数简化代码

    javascript - 延迟 window.print() 直到页面在 ajax 请求中加载以避免空白打印屏幕?

    c# - 用于转换超链接的 RegExp 帮助

    javascript - 如何避免在以下脚本中使用两次替换(仅使用一个正则表达式)?

    regex - 从带有附加条件的字符串中提取8位数字

    javascript - Meteor App 中的文件上传

    javascript - 列出所有产品

    javascript - 如何使用 JavaScript 获取掉落元素的类名?

    正则表达式匹配除模式之外的尾部斜线

    java - 美国键盘中所有特殊字符的字母数字正则表达式