gpt4 book ai didi

javascript - 在正则表达式中,匹配一件事或另一件事,或两者都匹配

转载 作者:行者123 更新时间:2023-12-03 02:05:00 25 4
gpt4 key购买 nike

在正则表达式中,我需要知道如何匹配一件事或另一件事,或两者(按顺序)。但至少需要有一件事情存在。

例如下面的正则表达式

/^([0-9]+|\.[0-9]+)$/

将匹配

234

.56

但不是

234.56

而下面的正则表达式

/^([0-9]+)?(\.[0-9]+)?$/

将匹配上面的所有三个字符串,但它也会匹配空字符串,这是我们不想要的。

我需要一些能匹配上面所有三个字符串的东西,但不能匹配空字符串。有没有简单的方法可以做到这一点?

更新:

下面的安德鲁和贾斯汀都适用于我提供的简化示例,但它们不适用于(除非我弄错了)我希望解决的实际用例,所以我现在应该将其放入。这是我正在使用的实际正则表达式:

/^\s*-?0*(?:[0-9]+|[0-9]{1,3}(?:,[0-9]{3})+)(?:\.[0-9]*)?(\s*|[A-Za-z_]*)*$/

这将匹配

45
45.988
45,689
34,569,098,233
567,900.90
-9
-34 banana fries
0.56 points

但它不匹配

.56

我需要它来做到这一点。

最佳答案

给定正则表达式 /^A$//^B$/ 的完全通用方法是:

/^(A|B|AB)$/

/^([0-9]+|\.[0-9]+|[0-9]+\.[0-9]+)$/

请注意,其他人已使用您的示例的结构进行简化。具体来说,他们(隐式)对其进行因式分解,以提取左侧和右侧常见的 [0-9]*[0-9]+ 因子。

其工作原理是:

  • 所有交替元素都以 [0-9]+ 结尾,因此将其取出:/^(|\.|[0-9]+\.)[ 0-9]+$/
  • 现在我们在交替中可能出现空字符串,因此使用 ? 重写它(即使用等价 (|a|b) = (a|b)?): /^(\.|[0-9]+\.)?[0-9]+$/
  • 再次使用通用后缀(\.)进行替换:/^((|[0-9]+)\.)?[0-9]+ $/
  • 模式(|a+)a*相同,所以最后:/^([0-9]*\.)? [0-9]+$/

关于javascript - 在正则表达式中,匹配一件事或另一件事,或两者都匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com