代码之家  ›  专栏  ›  技术社区  ›  Leo Messi

将两个正则表达式合并为一个

  •  0
  • Leo Messi  · 技术社区  · 6 年前

    正则表达式必须匹配小数点后最多两位数的所有正双精度数、大于0.01的数字以及科学记数法,例如(1.0e7)。

    我设法分别解决了这两个问题。

    用于匹配小数点后最多2位且大于0.01的所有正双精度:

    "^(?!0+\\.0+$)^\\d+(?:\\.\\d{1,2})?$"
    

    对于包括科学符号在内的任何数字:

    "^[+-]?\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?$"
    

    当我只想把它们组合成一个的时候,问题就来了。

    我尝试了所描述的方法 here 但没有一个对我有用。 javascript/angularjs是一种重要的语言。

    有什么建议吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Attersson    6 年前

    尝试:

    • ^$
    • 将每个原始正则表达式封装为 non capturing
    • “或”两组
    • 把整个包围在一个非捕获组中
    • 重新添加 ^ $ 整个表情。

    结果:

    ^(?:(?:(?!0+\\.0+$)^\\d+(?:\\.\\d{1,2})?)|(?:[+-]?\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?))$
    
        2
  •  0
  •   Александр Зосимчук    6 年前

    你可以把你的正则表达式分成块

    (^(?!0+\\.0+$)^\\d+(?:\\.\\d{1,2}))?$ ?(^[+-]?\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?$)