为什么string.split在此示例中返回额外的空条目?

时间:2017-11-28 11:54:05

标签: javascript regex string split

我有一些代码,它接受用户输入字符串日期MM / DD / YYYY并将其重构为YYYYMMDD,然后返回重构的字符串。

function formatDate(userDate) {
      
    
      // format from M/D/YYYY to YYYYMMDD
      var dateParts = userDate.split(/(\d{1,2})\/(\d{1,2})\/(\d{4})/);
      var day = dateParts[2],
        month = dateParts[1],
        year = dateParts[3];
        
        console.log(dateParts.length);
        for (var i = 0; i < dateParts.length; i++) {
          console.log(dateParts[i]);
        }
        console.log(dateParts);
        
      if (day > 0 && day <= 9)
        day = 0 + day;
      if (month > 0 && month <= 9)
        month = 0 + month;
      return year + month + day;
    }
    
    console.log(formatDate("12/31/2014"));
    

jsfiddle link 起初我以为string.split()返回一个基于1的数组,但后来我发现实际上它返回一个长度为5的数组,在userDate [0]和userDate [4]上有空字符串,我可以'想通了。为什么会这样?谢谢!

2 个答案:

答案 0 :(得分:3)

这应该有用。

&#13;
&#13;
function formatDate(userDate) {
  // format from M/D/YYYY to YYYYMMDD
  console.log(userDate);
  var dateParts = userDate.split("/");
  return dateParts[2] + dateParts[0] + dateParts[1];
 }
console.log(formatDate("12/31/2014"));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这里有两个问题

  • 使用split
  • 替换/\//的正则表达式
  • 减少每个项目的index

var day = dateParts[1],
month = dateParts[0],
year = dateParts[2];

<强>演示

&#13;
&#13;
function formatDate(userDate) {
  var dateParts = userDate.split(/\//);
  var day = pad0(dateParts[1]), month = pad0(dateParts[0]), year = dateParts[2];
  return year + month + day;
}

function pad0(input)
{
   return ("0" + input).slice(-2);
}

console.log(formatDate("12/31/2014"));
&#13;
&#13;
&#13;