※ 引述《ggirls》之銘言:
: 有時可以沒有年,有時可以沒有日,但若是「年-日」
: 就應拆分成兩個日期。
也就是
年月日
年月
月日
年
月
日
對吧
先分析一下 月 出現最多次
所以以月為主 pattern 而沒有月的當例外處理
可以寫成 (?:\s*\d+\s*年)?(?:\s*\d+\s*月(?:\s*\d+\s*日)?)
例外的兩個規則分別是 年 與 日
所以寫成 \s*\d+\s*[年日]
最後用 | 連起來
(?:\s*\d+\s*年)?(?:\s*\d+\s*月(?:\s*\d+\s*日)?)|\s*\d+\s*[年日]
我的執行結果:
> '1月 1日 2年 2月 2 日 3年3月 4年 5年5月 6年 7日'
.match(/(?:[0-9 ]+年)?(?:[0-9 ]+月(?:[0-9 ]+日)?)|[0-9 ]+[年日]/g)
[ '1月 1日', ' 2年 2月 2 日', ' 3年3月', ' 4年', ' 5年5月', ' 6年', ' 7日' ]
語言為 JavaScript (Node.js v6.2.1)