Javascript:为每个分号分隔的子字符串获取第一个数字子字符串

标签 javascript string for-loop

我正在从 MySQL 创建时间计算脚本,因为我不想使用 PHP 在服务器端加载脚本。

我正在获取数据并使用 JSON 对其进行解析,这为我提供了列和行数据的值字符串。此数据的格式如下:

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

我需要用分号分割这个字符串,然后从每个逗号之前提取第一个 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);
}

最佳答案

这是一种基于正则表达式的方法:

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)。

这两种情况表示如下:

  1. 匹配任何以 ; 开头的数字序列使用 negated lookbehind rule : (?<=;)(\d+) , 其中;是必须跟在数字序列 \d+ 之后的字符成为一场比赛
  2. 匹配作为输入字符串第一个数字序列且具有,的任何数字序列使用 lookahead rule 直接跟随它(^\d+(?=,)) , 其中\d+是数字序列,,是必须直接跟随该数字序列才能匹配的字符
  3. 这些构建 block 1 和 2 使用 | 组合在一起运算符实现最终结果

关于Javascript:为每个分号分隔的子字符串获取第一个数字子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54666797/

相关文章:

r - 在最接近特定字符数的完整单词处剪切字符串

java - 如何将日期转换为字符串并再次日期?

c++ - 将字符串中的数据提取到映射中的有效方法是什么?

c# - 代码困惑 - 为什么一个有效,而另一个无效?

javascript - 将 CryptoJS 的 CryptoMD5 状态保存为字符串并稍后恢复

javascript - 哪个版本的 javascript 引入了任意构造函数返回?

javascript - 如何延迟流读取调用

javascript - 如何为每行文本生成行号?

java - 错误: incompatible types: int cannot be converted to int[] & other errors

java - 读取大文件到数组 java.lang.OutOfMemoryError : Java heap space