JavaScript提取不包含`:`的字符

时间:2019-01-08 20:40:19

标签: javascript string

我有以下文本字符串:

TEST:ABCDEGF:18:32

本文中的字母各不相同,其中还包括数字。目标是提取除:字符以外的所有字母和数字。

到目前为止,以下内容对我有用:

lines.split(":");

直到我偶然发现了一个新要求,即我们还需要以完整格式18:32提取时间,这意味着如果我使用split,它只会给我直到18

现在我该如何提取包括有时可能发生的时间在内的信息。

示例

ABCDED:ERERE:18:32

所需结果:

 temp.fields[0] = ABCDED
 temp.fields[1] = ERERE
 temp.fields[2] = 18:32 

5 个答案:

答案 0 :(得分:2)

如果您的time总是在结尾处,那么您可以执行以下操作。

function doIt(str) {
  var a = str.split(':');
  var b = a.splice(-2) //remove 2 last from a and save in b
    .join(':');
  a.push(b);
  return a;
}

console.log(doIt('TEST:ABCDEGF:18:32'));

答案 1 :(得分:1)

尝试一下

let str = `TEST:ABCDEGF:18:32:aa:12:BCB:11:12:AAA`;

let m = str.replace(/(\d\d\:\d\d)|\:/g,"$1 ").replace(/ +/g,' ').split(' ');

console.log(m);

Regexp的解释:“ \ d \ d:\ d \ d”匹配第一个组的时间,“:”匹配冒号,然后我们仅将第一个组和空格“ $ 1”用作输出(因此我们省略了冒号,并且不匹配的文本将被复制而不会发生任何变化),然后(第二次替换)我们将加倍的空格更改为1个空格,然后将其全部拆分为数组。

答案 2 :(得分:1)

我使用:

解决了该问题
var p2 = parts.slice(3).join(':');

来自以下链接:

  

Split string with limit, where last string contains the remainder

这按预期工作。

感谢t.niese的分享,并感谢所有回答的人。所有这些答案都有效,但是在上面的链接中,这是一个简单的解决方案。不幸的是不能接受所有答案。但是如果我有选择的话,我很乐意这样做。 +1

答案 3 :(得分:0)

您可以在所有位置使用replace修改定界符(:),除非数字之间。像这样:

const data = "ABCDED:ERERE:18:32";

const arr = data.replace(/:/g, function(match, pos, str){
  const before = str.substring(pos - 2, pos);
  const after = str.substring(pos + 1, pos + 3);

  if(!isNaN(before) && !isNaN(after)){
    return match;
  }else {
    return "|";
  }
}).split("|");

console.log(arr);

答案 4 :(得分:0)

我看到评论总是总是以结尾出现,所以这是我的第二个简单答案(s中的文字)

temp.fields = [...s.slice(0,-6).split(':'), s.slice(-5)]

let s="ABCDED:ERERE:18:32"

let fields =  [...s.slice(0,-6).split(':'), s.slice(-5)]; 

console.log(fields);