一般来说,我认为我没有遇到过这个问题的通用解决方案。如何匹配可以是范围或单个值的字符串?
假设我想匹配 [复杂] 日期:
- 1999 - 2010
- 公元前 323 年 - 公元 100 年
- 公元前323年
- 1995-99
- 公元前 323 - 322 年
可以解析这两种情况的通用正则表达式“模板”是什么:
- 开始/结束日期(如果存在)
- 否则,只有一个日期
要匹配“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 年),它也可以处理上面列表中的其他示例?