JS Regex:如何从“08/08/2017”删除前2个零

时间:2017-08-09 05:04:15

标签: javascript node.js regex regex-group

我是regex的新手,并且整夜都在研究如何从“08/08/2017”中删除前两个零(在“2017”中不删除0)

我所评论的5+正则表达式教程似乎没有涵盖我需要的内容。

日期可以是从系统返回的任何sysdate。所以正则表达式也需要为“12/12/2017”工作

这是我提出的最好的:

let sysdate = "08/08/2017"
let todayminuszero = str.replace("0","");
let today = todayminus0.replace("0","");

它有效,但显然它不专业。

从教程中,我很确定我可以做到这一点: str.replace(/ \ d {2} //克, “”)); 这种模式将避免在str中获得第3个零。 替换字符串必须表示8/8 / 不知道怎么写这个。

4 个答案:

答案 0 :(得分:3)

对于日期操作,我会使用其他功能(最佳日期相关),但是,对于你说的情况,这应该这样做。如果您需要其他格式,我建议您以不同的方式删除零,但这一切都取决于您的UseCase。

let sysdate = "08/08/2017";
let todayminuszero = sysdate.replace(/0(?=\d\/)/gi,"");
console.info(todayminuszero);

  

(?= ...)被称为Lookahead,你可以看到它是什么,而不是替换它   在这种情况下,我们正在检查数字和斜线。 (?=\d\/)   这里有更多信息,如果你想了解前瞻和更多 http://www.regular-expressions.info/lookaround.html

测试正则表达式的好地方是 https://regex101.com/ 我总是将它用于更高级的表达式,因为它显示所有匹配的组,因此,有一个很好的解释。如果您正在学习或创建困难的表达式,那就是很好的资源/帮助。

  Rajesh提到的

信息,此表达式不需要i标志,我只是出于个人喜好而使用它。此标志仅将表达式匹配设置为不区分大小写

- 超出范围,但可能很有趣 -

没有正则表达式的更长解决方案可能如下所示:

let sysdate = "08/08/2017";
let todayminuszero = sysdate.split("/").map(x => parseInt(x)).join("/");

console.info(todayminuszero);

背面,这个解决方案有很多移动部件,split函数来制作一个数组('“08/08/2017”'到'[“08”,“08”,“2017”]') ,map函数,使用lambda函数=>parseInt函数,使每个字符串项成为一个很好的整数(如:"08"到{{1} },...)最后是8函数,用于从新创建的整数数组中创建最终字符串。

答案 1 :(得分:0)

你应该使用这个



let sysdate = "08/08/2017"
let todayminuszero = sysdate.replace(/(^|\/)0/g,"$1");
console.log(todayminuszero);




答案 2 :(得分:0)

function stripLeadingZerosDate(dateStr){
    return dateStr.split('/').reduce(function(date, datePart){
        return date += parseInt(datePart) + '/'
    }, '').slice(0, -1);
}

console.log(stripLeadingZerosDate('01/02/2016'));
console.log(stripLeadingZerosDate('2016/02/01'));

看这里

function stripLeadingZerosDate(dateStr){
return dateStr.split('/').reduce(function(date, datePart){
    return date += parseInt(datePart) + '/'
}, '').slice(0, -1);

}

console.log(stripLeadingZerosDate('01/02/2016'));// 1/2/2016
console.log(stripLeadingZerosDate('2016/02/01'));// "2016/2/1"

答案 3 :(得分:-1)

通过前2个零,我知道你在月份和日期8之前的意思是零。

您可以尝试这样的事情:

  • 创建一个正则表达式,用于捕获代表日期,月份和年份的数字组。
  • 使用此正则表达式替换值。
  • 使用函数返回已处理的值。



var sysdate = "08/08/2017"
var numRegex = /(\d)+/g;

var result = sysdate.replace(numRegex, function(match){
  return parseInt(match)
});
console.log(result)