在第一个单词后获取字符串

时间:2017-12-20 16:00:54

标签: javascript split

我正在尝试拆分句子并在第一个单词之后获取字符串。

我目前的尝试:

var datetime = "28 Dec2.55pm";
datetime.split(/[0-9]+/);
console.log(datetime);
// This returns back all the words and no numbers.

预期结果:

// Ethier
28 Dec 2.55pm
// Or
[0] => 28 Dec
[1] => 2.55pm

我想对此有一些指导,你不必只给出一些完整的答案。

4 个答案:

答案 0 :(得分:7)

而不是split,我使用match



var datetime = "28 Dec2.55pm";
var d = datetime.match(/^(\d+\s[a-z]+)(.+)$/i);
console.log(d);




<强>解释

/           : regex delimiter
  ^         : begining of string
  (         : start group 1
    \d+     : 1 or more digits
    \s      : a space
    [a-z]+  : 1 or more letter
  )         : end group 1
  (         : start group 2
    .+      : 1 or more any characters
  )         : end group 2
  $         : end of string
/i          : regex delimiter, case insensitive

答案 1 :(得分:3)

&#13;
&#13;
var datetime = '28 Dec2.55pm';

// Split datetime on spaces
var split = datetime.split(' ');

var parsed = [
  split[0], // First element is the day
  split[1].substr(0, 3), // First three characters of second element represent name of the month
  split[1].substr(3, split[1].length - 3) // All characters in second element from index 3 onward present the time
];

console.log(parsed);
&#13;
&#13;
&#13;

此代码假定月份名称的长度始终为3个字符。

那些寻求更清洁解决方案的人我建议 @Toto 的答案。

答案 2 :(得分:0)

如果你坚持使用正则表达式,这可能是有用的。它不是一个完美的剪裁合身,但它足够接近,有一些假设:

var myRe = /(\d{1,2}\s\w{3})(\d{1,2}\.\d{1,2}\w{2})/g;
var myArray = myRe.exec('28 Dec2.55pm');

console.log(myArray);  

它假设:

  • 1-2个数字日期,以空格分隔,每月3个字符作为第一次捕获
  • 用小时分隔1-2小时的数字。
  • 表示1-2分钟和分钟

它会快速提供你所需要的东西,但是如果你的时间不对,数据错误,下午可能是GG或其他任何东西等,它就没有失败。

答案 3 :(得分:-1)

也许是愚蠢的回答,但我认为你总是有相同的结构,对吧?这意味着&#34;日空间三个字母月份的非空间确切时间&#34;。

月份是3个字母,天数写成01,总有空间你可以简单地将它划分为第7个字符

如果上述情况属实,只有天数写为&#34; 1&#34;而不是&#34; 01&#34;,最简单的方法是查看第二个字符 - 如果是数字,则除以第7位,如果它是第6位的空格分割。