使用javascript根据一位或两位数字字符提取子字符串

扎克

这是一个新问题,基于我之前提出的问题根据分隔符从字符串中提取子字符串(已接受答案)

我有一个字符串 ]d1[)½}06~9N110375286414~1T12345ABCD~D150600~S12345ABCDEF98765}

注意}上面的例子后面有一个空格

我在上述字符串上的分隔符是 9N、1T、D、S,我需要在分隔符之后提取子字符串,直到它命中~或 EOL。

在它下面的小提琴期待D1S1作为分隔符,而不是DS分别。

我面临两个问题

1) 单字符分隔符问题 ( D, S)

2)}返回值时我应该如何在字符串的末尾剥离例如,带分隔符的子字符串S应该返回12345ABCDEF98765而不是12345ABCDEF98765}

小提琴(结果基于控制台)

JS

// Use ]d1[)½}06~9N110375286414~1T12345ABCD~D150600~S12345ABCDEF98765} 
// Note: There is an empty space after the } char as shown above

var dataNames = {
  '9N': 'PPN',
  '1T': 'batchNumber',
  'D': 'expireDate',
  'S': 'serialNumber'
};

var input = document.querySelector("input");
document.querySelector("button").addEventListener("click", function() {
  var str = input.value;
  console.log(parseGS1(str));
});

function parseGS1(str) {
  var fnc1 = "~";
  var data = {};

  //remove ]d1[)½}06~
  str = str.slice(10);

  while (str.length) {
    //get the AI identifier: 1T, 9N etc
    let aiIdent = str.slice(0, 2);
    //get the name we want to use for the data object
    let dataName = dataNames[aiIdent];
    //update the string
    str = str.slice(2);

    switch (aiIdent) {
      case "1T":
      case "9N":
        let fnc1Index = str.indexOf(fnc1);
        //eol or fnc1 cases
        if (fnc1Index == -1) {
          data[dataName] = str.slice(0);
          str = "";
        } else {
          data[dataName] = str.slice(0, fnc1Index);
          str = str.slice(fnc1Index + 1);
        }
        break;
      case "D":
      case "S":

        //eol or fnc1 cases

        break;
      default:
        console.log("unexpected ident encountered:", aiIdent);
        return false;
        break;
    }
  }
  return data;
}
蒂斯

您也可以使用正则表达式执行此操作。使用此解决方案,当部分字符串四处移动时,它仍然可以工作。

function getData(input) {
  input = input.slice(0, input.length - 2);
  // The regex has two capture groups. 
  // Group 1 gets the identifier, this can also be the start of the string.
  // Group 2 gets all the characters between the identifier and the '~' char or '} '.
  // The third group is a non-capturing group, it is used to find the delimiter where the next part starts.
  var
      regex = /(^|9N|1T|D|S)(.*?)(?:~|$)/g,
      data = {},
      match = regex.exec(input);

  while (match !== null) {
    switch(match[1]) {
    case '9N':
      data.PPN = match[2];
      break;
    case '1T':
      data.batch = match[2];  
      break;
    case 'D':
      data.expireDate = match[2];  
      break;
    case 'S':
      data.serial = match[2];  
      break;  
    }
    var msg = 'Found ' + match[0] + ' / identifier = ' + match[1]  +  ' / value = ' + match[2] + '. ';
    console.log(msg);

    // Get the next match.
    match = regex.exec(input);
  }
  return data;
}

var input = ']d1[)½}06~9N110375286414~1T12345ABCD~D150600~S12345ABCDEF98765} ',
    input2 = ']d1[)½}06~9N110375286414~D150600~1T12345ABCD~S12345ABCDEF98765} ';
console.log(getData(input));
console.log(getData(input2));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

子字符串以捕获一位或两位数字

来自分类Dev

将数字字符串拆分为一位数字和两位数字的可能组合

来自分类Dev

根据常见字符串的出现重新索引两位数字字符串

来自分类Dev

将字符串中的一位数字(1或5B)替换为两位数字(01或05B)

来自分类Dev

Python排序方法将两位数字字符串视为三位数字字符串

来自分类Dev

Python排序方法将两位数字字符串视为三位数字字符串

来自分类Dev

需要Excel公式来提取字符或符号前的一位或两位数数字

来自分类Dev

R regex:如何提取标题中包含一两位数字的字符串?

来自分类Dev

DateTime.ParseExact-如何解析具有相同格式字符串的一位数和两位数小时?

来自分类Dev

如果是两位数,如何使数字字符串之间没有空格?

来自分类Dev

java:将代表两位数字年份的字符串转换为四位数

来自分类Dev

如何在R中使用Stringr将一位数字替换为两位数字

来自分类Dev

如何在R中使用Stringr将一位数字替换为两位数字

来自分类Dev

提取 Excel 中某个字符串之后的前两位数字

来自分类Dev

从python中的字符串中提取两位数

来自分类Dev

在Powershell中使用一些已知字符和未知两位数拆分字符串

来自分类Dev

如何仅保留字符串的前两位数字?

来自分类Dev

用两位数字格式化字符串

来自分类Dev

两位数的字符串加法,末尾没有数字

来自分类Dev

一位和两位数的Grep

来自分类Dev

如何从包含字符和数字的字符串中提取最后一位数字

来自分类Dev

如何从包含字符和数字的字符串中提取最后一位数字

来自分类Dev

如果字符串只有两位数字,请在字符串中添加“ 0”

来自分类Dev

DateTime.ParseExact具有7位数字/一位或两位数月份

来自分类Dev

python将一位数字的日期和月份转换为两位数

来自分类Dev

我如何在python 2.7中将一位数字输出为两位数

来自分类Dev

当数字从两位数变为一位数时,如何使屏幕上的字体居中?

来自分类Dev

Bash脚本如何接受一位或两位数的数字并将其设置为2位

来自分类Dev

Javascript - 如何总结一个数字的所有第一位和最后一位数字,直到只剩下两位数字?

Related 相关文章

  1. 1

    子字符串以捕获一位或两位数字

  2. 2

    将数字字符串拆分为一位数字和两位数字的可能组合

  3. 3

    根据常见字符串的出现重新索引两位数字字符串

  4. 4

    将字符串中的一位数字(1或5B)替换为两位数字(01或05B)

  5. 5

    Python排序方法将两位数字字符串视为三位数字字符串

  6. 6

    Python排序方法将两位数字字符串视为三位数字字符串

  7. 7

    需要Excel公式来提取字符或符号前的一位或两位数数字

  8. 8

    R regex:如何提取标题中包含一两位数字的字符串?

  9. 9

    DateTime.ParseExact-如何解析具有相同格式字符串的一位数和两位数小时?

  10. 10

    如果是两位数,如何使数字字符串之间没有空格?

  11. 11

    java:将代表两位数字年份的字符串转换为四位数

  12. 12

    如何在R中使用Stringr将一位数字替换为两位数字

  13. 13

    如何在R中使用Stringr将一位数字替换为两位数字

  14. 14

    提取 Excel 中某个字符串之后的前两位数字

  15. 15

    从python中的字符串中提取两位数

  16. 16

    在Powershell中使用一些已知字符和未知两位数拆分字符串

  17. 17

    如何仅保留字符串的前两位数字?

  18. 18

    用两位数字格式化字符串

  19. 19

    两位数的字符串加法,末尾没有数字

  20. 20

    一位和两位数的Grep

  21. 21

    如何从包含字符和数字的字符串中提取最后一位数字

  22. 22

    如何从包含字符和数字的字符串中提取最后一位数字

  23. 23

    如果字符串只有两位数字,请在字符串中添加“ 0”

  24. 24

    DateTime.ParseExact具有7位数字/一位或两位数月份

  25. 25

    python将一位数字的日期和月份转换为两位数

  26. 26

    我如何在python 2.7中将一位数字输出为两位数

  27. 27

    当数字从两位数变为一位数时,如何使屏幕上的字体居中?

  28. 28

    Bash脚本如何接受一位或两位数的数字并将其设置为2位

  29. 29

    Javascript - 如何总结一个数字的所有第一位和最后一位数字,直到只剩下两位数字?

热门标签

归档