我有以下文本字符串:
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
答案 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);