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

Posted

技术标签:

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

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

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

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

"^(?!0+\\.0+$)^\\d+(?:\\.\\d1,2)?$"

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

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

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

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

有什么建议吗?

【问题讨论】:

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

试试:

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

结果:

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

【讨论】:

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

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

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

【讨论】:

以上是关于将两个正则表达式合并为一个的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式拆分并合并为单个记录

使用正则表达式自动合并

Notepad++正则表达式合并多行代码为1行

正则表达式(re)

多次匹配正则表达式模式

正则表达式,字符串中需要两个反斜杠“\d”