2016-07-11 33 views
0

我需要将这个字符串拆分为下午3点,所以最终结束为[3:00] [pm]。以下是我的尝试,但它不正确,因为控制台打印p m如何将字符串拆分为索引中的数组?

date = '3:00pm' 
var elem = date.slice(date.length-2); 
+1

['.slice()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice)返回一个字符串,而不是阵列。你可能想在这里使用['.split()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)。 –

回答

5

你可以用两个不同的切片得到两个不同的部分。

var date = '3:00pm'; 
 
var arr = [ 
 
    date.slice(0, -2), // first to 2nd from last 
 
    date.slice(-2) // just the last 2 
 
]; 
 
console.log(arr);

0

var date = '3:00pm'; 
 

 
var time = date.substr(0, date.length - 2); // 3:00 
 
var period = date.substr(date.length - 2); // pm 
 

 
console.log(time); 
 
console.log(period);

+1

我会将这两个点中的4改为'date.length-2'或'-2',这样10,11和12也可以工作,并删除周期线中的2 – depperm

+0

@depperm好点,谢谢。编辑。 – Timo

1

您可以使用String.prototype.match()RegExp/\d+:\d+|\w+/g

var date = "3:00pm" 
 
var elem = date.match(/\d+:\d+|\w+/g); 
 
console.log(elem[0], elem[1])

1

你可以使用正向预测的正则表达式。

console.log("3:00pm".split(/(?=[ap]m)/)); 
 
console.log("11:55am".split(/(?=[ap]m)/));

+0

也许还需要检查'am' –

+0

@mortezaT,请参阅编辑。 –

+0

这看起来不错。但我可以知道为什么正则表达式而不是简单的子字符串? –

0

我相信你要分割不仅3:00pm而且其他时间。这里是一个使用正则表达式的示例。

var re=/([0-9:]+)\s*(am|pm)/i; 
var ar=[]; 
'3:00pm'.replace(re,function(m/*whole match ([0-9:]+)\s*(am|pm)*/, pt1/*([0-9:]+)*/, pt2/*(am|pm)*/){ 
    ar.push(pt1, pt2); //push captures 
    return m; //do not change the string 
}); 
console.log(ar); //["3:00","pm"]