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

Combine two regex expressions into one

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

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

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

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

对于包括科学记数法在内的任何数字:

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

当我想把它们合二为一时,问题就来了。

我尝试了 here 中描述的方法,但 none 对我有用。 JavaScript/AngularJS 是重要的语言。

有什么建议吗?

您可以将正则表达式分成多个块

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

尝试:

  • 剥离^$
  • 将每个原始正则表达式封装到一个 non capturing 组中
  • 'OR'两组
  • 将整体围成一个非捕获组
  • 重新添加 ^ $ 到整个表达式。

结果:

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