我正在尝试将日期和月份的零替换为空值。但现在包括更新的年份。该怎么做?
我发现我的方法很长。有人告诉我最简单的方法吗?
这是我的尝试:
var date = "04/07/2019".replace(/(\d{2})\/(\d{2})\/(\d{4})/, "$3/$2/$1").replace(/0/g, '').split('/').join(',');
console.log(date); // 219,7,4 !!?
答案 0 :(得分:2)
只有一个非常简单的正则表达式:
var date = "04/07/2019".split(/\//g).map(n => +n).reverse().join(",");
console.log(date)
答案 1 :(得分:1)
尝试一下:
var date = d => d.replace( /(\d{2})\/(\d{2})\/(\d{4})/, "$3/$2/$1").replace(/(?<=\/)0/g, '').split('/').join(',');
console.log(date("04/07/2019"));
console.log(date("20/07/2019"));
console.log(date("20/10/2019"));
答案 2 :(得分:1)
您的(\d{2})
子模式可以匹配天和月,可以用(?:0?(\d)|(\d{2}))
模式替换,该模式可以匹配可选的0
,后跟捕获到一组中的数字,或匹配任意两个数字数字并将它们捕获到另一个组中,然后在替换时,只需对这些组使用两个反向引用(其中一个将始终为空,另一个将保留一些文本)。
s = s.replace(/(?:0?(\d)|(\d{2}))\/(?:0?(\d)|(\d{2}))\/(\d{4})/, "$5,$3$4,$1$2");
请参见regex demo。
要匹配整个字符串,请添加锚点-如有必要:
/^(?:0?(\d)|(\d{2}))\/(?:0?(\d)|(\d{2}))\/(\d{4})$/
如果匹配的文本较长,请尝试单词边界(如果未粘贴到字母,其他数字或下划线),然后使用g
修饰符替换所有出现的单词:
/\b(?:0?(\d)|(\d{2}))\/(?:0?(\d)|(\d{2}))\/(\d{4})\b/g
请参阅JS演示
var rx = /(?:0?(\d)|(\d{2}))\/(?:0?(\d)|(\d{2}))\/(\d{4})/;
var repl = "$5,$3$4,$1$2";
console.log("04/07/2019".replace(rx, repl));
console.log("22/08/2019".replace(rx, repl));
console.log("10/10/2019".replace(rx, repl));
答案 3 :(得分:0)
好吧,日期和月份的零后紧跟一个数字,再加上一个正斜杠,因此您可以利用它:
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/p5.js"></script>
答案 4 :(得分:0)
要解决您的问题,您需要替换前导零,所以匹配/ 0而不是0。
var date = "04/07/2019".replace(/(\d{2})\/(\d{2})\/(\d{4})/, "$3/$2/$1").replace(/\/0/g, '/').split('/').join(',');
console.log(date); // 219,7,4 !!?
我个人而言,只需更改reg exp即可忽略前导零。
console.log("04/07/2019".match(/[1-9]\d{0,3}/g).reverse().join(","))
答案 5 :(得分:0)
这是什么:
async