正则表达式回溯多个条件

问题描述 投票:0回答:2

我有一个字符串,可能如下(1种可能性):

"1/1/2024; 02/01/2024; 2024-10-01" 

我想(从右侧)返回多种可能的日期格式的最后一次出现:

mm/dd/yyyy, mm/dd/yy, yyyy-mm-dd, m/dd/yyyy, m/d/yyyy

因此,从上面的示例中,仅查找并返回

2024-10-01
。我怎样才能做到这一点?我正在考虑使用带有 OR 条件的回溯,但它不起作用:

(?!\d{2}/\d{2}/\d{4}|\d{2}/\d{2}/\d{2}|\d{4}-\d{2}-\d{2}|\d{1}/\d{2}/\d{4}|\d{2}/\d{1}/\d{4}|\d{1}/\d{1}/\d{4})
regex regex-group regexp-replace
2个回答
0
投票

如果日期由分号分隔(在本例中),您可以像这样捕获最后一个日期:

.+;(.+)$

您可以在这里在线查看,包括每件作品的解释


0
投票
let txt = "1/1/2024; 2/1/2024; 2024-10-1; 3/3/2024; 2005-3-3; 24-06-06";

let res = txt.replace(/(^|(?<=[;\s*\/\-]))\d{1}((?=[\/\-;\s])|$)/g, '0$&').split(';').map(x => x.trim())
.filter(x => (x.match(/^((\d{2}[\/\-]){2}\d{4})$/g) || x.match(/^(\d{4}([\/\-]\d{2}){2})$/g) ||  x.match(/^(\d{2}[\/\-]){2}\d{2}$/g))) ;

console.log(res);
© www.soinside.com 2019 - 2024. All rights reserved.