gpt4 book ai didi

javascript - 单个正则表达式匹配范围(1999-2010)还是仅匹配单个值(2010)?

转载 作者:行者123 更新时间:2023-12-02 19:33:52 30 4
gpt4 key购买 nike

总的来说,我认为我还没有遇到过这个问题的通用解决方案。如何匹配可以是范围或只是单个值的字符串?

假设我想匹配[复杂]日期:

  • 1999 - 2010
  • 公元前 323 年 - 公元 100 年
  • 公元前 323 年
  • 1995-99
  • 公元前 323 - 322 年

可以解析这两种情况的通用正则表达式"template"是什么:

  1. 开始/结束日期(如果存在)
  2. 否则,只有一个日期

要匹配“1999 - 2010”,您可以这样做

/(\d+\s*)-(\s*\d+)/ // where $1 and $2 are start and end

要匹配更复杂的“323 BCE - 100 CE”,您可以这样做

/(\w+\s*\w+)\s*-\s*(\w+\s*\w+)/

要匹配更简单的“323 BC”,您可以这样做

/\w+\s*\w+/

但是,如何编写一个表达式来首先检查范围(公元前 323 年 - 公元 100 年),如果不存在,则检查单个值(公元前 323 年),即还可以处理上面列表中的其他示例吗?

最佳答案

将匹配的后半部分设置为可选。

/(\w+\s*\w+)(?:\s*-\s*(\w+\s*\w+))?/

示例(JavaScript)

"1900 - 2000".match(/(\w+\s*\w+)(?:\s*-\s*(\w+\s*\w+))?/);
//["1900 - 2000", "1900", "2000"]

"1900 BC".match(/(\w+\s*\w+)(?:\s*-\s*(\w+\s*\w+))?/);
//["1900 BC", "1900 BC", undefined]

请注意,外部可选部分被设置为不匹配,因此结果数组仅包含您感兴趣的子匹配。

从效率 Angular 收紧模式也是一个想法,例如寻找数字而不是任何字母数字,并且只允许单个空格(如果可以接受)而不是零个或多个。

关于javascript - 单个正则表达式匹配范围(1999-2010)还是仅匹配单个值(2010)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11168389/

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