将两个正则表达式组合成一个

时间:2018-06-04 13:15:57

标签: angularjs regex numbers scientific-notation

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

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

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

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

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

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

当我想把它们放在一起时,问题出现了。

我尝试了here描述的方法,但没有一个对我有效。  如果JavaScript / AngularJS具有任何重要性,则使用它。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

尝试:

  • strip ^$
  • 将每个原始正则表达式都包含在non capturing
  • ' OR'两组
  • 将整体包含在非捕获组中
  • ^ $重新添加到整个表达式中。

结果:

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

答案 1 :(得分:0)

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



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