如何使用正则表达式仅在日期和月份中替换“ 0”零

时间:2019-07-15 13:12:17

标签: javascript regex

我正在尝试将日期和月份的零替换为空值。但现在包括更新的年份。该怎么做?

我发现我的方法很长。有人告诉我最简单的方法吗?

这是我的尝试:

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 !!?

6 个答案:

答案 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