【问题标题】:Combine two regex expressions into one将两个正则表达式合并为一个
【发布时间】:2018-06-04 13:15:56
【问题描述】:

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

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

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

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

对于任何数字,包括科学记数法:

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

当我想将它们组合成一个时,问题就来了。

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

有什么建议吗?

【问题讨论】:

  • 您不能使用 parseFloat 并根据结果数字检查您的条件吗?
  • 除非这是一项测试任务,否则在可读性/可维护性方面值得怀疑

标签: angularjs regex numbers scientific-notation


【解决方案1】:

试试:

  • 剥离^$
  • 将每个原始正则表达式包含在一个non capturing 组中
  • “或”两组
  • 将整体封闭在一个非捕获组中
  • 在整个表达式中重新添加^$

结果:

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

【讨论】:

  • 我试过你的方法,但它没有想要的行为。我可以在小数点后引入超过 2 位数字和负值,它们可以匹配。两个正则表达式的组合不会像这两者之间的交集一样吗?还是有更好的方法?
  • 我希望不能引入超过 2 位数字 :) 正则表达式应该匹配所有正双精度数,小数点后最多两位数,大于 0.01 的数字以及科学记数法,例如(1.0E7) 在同一时间
  • 您可能希望将正则表达式分开。由于它们逐行工作,因此请尝试匹配一个正则表达式,然后尝试另一个。总之很奇怪。那应该行得通。尝试在 regex101 上发布一个示例
  • 现在我正在使用带案例的开关,并且对于每个案例都有一个回报。例如:return "^(...)$",不知道有没有办法在这里添加多个检查...
  • 问题是第二个表达式已经匹配了像 55.555 这样的数字。我的方法有效。第二个表达式示例:regex101.com/r/5bFRDQ/1
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多