【发布时间】:2018-02-05 17:08:58
【问题描述】:
我正在尝试从编码的二维条码中提取数据。提取部分工作正常,我可以在文本输入中获取值。
例如,解码后的字符串是
]d20105000456013482172012001000001/:210000000001
基于以下规则(无法获得正确的表格降价,因此附上图片),我正在尝试从上述字符串中提取子字符串。
我要提取的子串:
05000456013482(在分隔符01之后)
201200(在分隔符 17 之后)
00001(在分隔符 10 之后)
0000000001(在分隔符 21 之后)
P.S - > 原始字符串 (]d2) 中的前 3 个字符始终相同,因为它只是简单地表示解码方法。
现在有些怪癖:
1) 分隔符10 后的字母数不固定。因此,在上面给出的示例中,即使它是 00001,它也可能是 001。同样,分隔符21 之后的字母数量也不是固定的,它可以是不同的长度。
对于不同长度的分隔符,我添加了一个常量/: 来确定通过手持设备扫描后编码何时结束。
现在,我在分隔符 10 之后查找 /: 并提取字符串直到它到达 /: 或 EOL 并找到分隔符 21 并删除字符串直到它到达 /: 或 EOL
2) 分隔符01 和17 后的字母数量始终是固定的(分别为14 个字母和6 个字母),如表所示。
注意:分隔符的位置可能会改变。换句话说,编码的条形码可以以不同的顺序书写。
]d20105000456013482172012001000001/:210000000001 - 注意:否/: 21组后签名,因为它是EOL
]d2172012001000001/:210000000001/:0105000456013482 - 注意:两者都是 10和 21 组有/. 标志表示我们必须提取直到那个标志
]d21000001/:210000000001/:010500045601348217201200 - 前两个是长度不等,接下来的两个是固定长度。
我不是正则表达式方面的专家,到目前为止,我只尝试使用一些简单的模式,例如 (01)(\d*)(21)(\d*)(10)(\d*)(17)(\d*)$,这在给定的示例中不起作用,因为它会像前 2 个字符一样查找 10 个字符。此外,使用substring(x, x) 方法仅适用于固定长度字符串的情况,前提是我知道我必须提取字符串的哪些索引。
P.S - 感谢 JS 和 jQuery 帮助。
【问题讨论】:
标签: javascript jquery regex string substring