我正在从MySQL创建时间计算脚本,因为我不想在PHP的服务器端加载脚本。
我正在获取数据并使用JSON对其进行解析,这给了我一列列和行数据的值。该数据的格式如下:
1548145153,1548145165,结束,天; 1548145209,1548145215,结束,天; 1548148072,1548148086,结束,天; 1548161279,1548161294,结束,天; 1548145161,1548145163,结束,天; 1548148082,1548148083,结束,天; 1548161291,1548161293,End,Day
我需要用分号分隔此字符串,然后从每个逗号之前提取第一个VARCHAR
号,以便在后续计算中使用它。
例如,我想从上面的数据中提取以下内容:
[1548145153, 1548145209, 1548148072, 1548161279, 1548145161, 1548148082, 1548161291]
我使用了以下类型的for循环,但无法正常运行:
for (var i=0; i < words.length; i++) {
var1 = words[i];
console.log(var1);
}
字符串和for循环在一起,如下所示:
var processData = function(data) {
for(var a = 0; a < data.length; a++) {
var obj = data[a];
var str= obj.report // something like 1548145153,1548145165,End,Day;1548145209,1548145215,End,Day;1548148072,1548148086,End,Day;1548161279,1548161294,End,Day;1548145161,1548145163,End,Day;1548148082,1548148083,End,Day;1548161291,1548161293,End,Day
words = str.split(',');
words = str.split(';');
for (var i=0; i < words.length; i++) {
var1 = words[i];
var2 = var1[0];
console.log(var2);
}
答案 0 :(得分:1)
第一件事是,您用words
的内容覆盖了str.split(';')
,因此它不会满足您的期望。要将字符串拆分为多个块,请先用;
拆分,然后遍历结果数组,并在循环内迭代用,
拆分。
const str= "1548145153,1548145165,End,Day;1548145209,1548145215,End,Day;1548148072,1548148086,End,Day;1548161279,1548161294,End,Day;1548145161,1548145163,End,Day;1548148082,1548148083,End,Day;1548161291,1548161293,End,Day";
const lines = str.split(';');
lines.forEach(line => {
const parts = line.split(',');
console.log(parts[0]);
});
答案 1 :(得分:1)
这是一种基于正则表达式的方法:
const str = "1548145153,1548145165,End,Day;1548145209,1548145215,End,Day;1548148072,1548148086,End,Day;1548161279,1548161294,End,Day;1548145161,1548145163,End,Day;1548148082,1548148083,End,Day;1548161291,1548161293,End,Day";
const ids = str.match(/(?<=;)(\d+)|(^\d+(?=,))/gi)
console.log(ids)
这里的总体思路是将第一个VARCHAR
值归类为:
;
字符之后的数字序列(请参见下面的1),或者对于小写字母,
字符(请参阅下面的2)。 这两种情况表示如下:
;
匹配以(?<=;)(\d+)
开头的任何数字序列,其中;
是必须跟随数字序列{{1}的字符}成为比赛对象\d+
(紧随其后的是,
,其后紧跟(^\d+(?=,))
数字序列,\d+
是必须直接跟随该数字序列才能匹配的字符,
运算符将这些构件1和2组合在一起,以获得最终结果答案 2 :(得分:0)
您所做的不正确,因为有两个分隔符,所以必须将字符串分开两次。即逗号和分号。
我认为您需要一个嵌套循环。
var str = "1548145153,1548145165,End,Day;1548145209,1548145215,End,Day;1548148072,1548148086,End,Day;1548161279,1548161294,End,Day;1548145161,1548145163,End,Day;1548148082,1548148083,End,Day;1548161291,1548161293,End,Day"
let words = str.split(';');
for (var i=0; i < words.length; i++) {
let varChars = words[i].split(',');
for (var j=0; j < varChars.length; i++)
console.log(varChars[j]);
}
我希望这会有所帮助。请不要忘记标记答案。