gpt4 book ai didi

javascript - 匹配不定长字符串的正则表达式

转载 作者:行者123 更新时间:2023-11-29 15:14:18 26 4
gpt4 key购买 nike

我有一个这样的字符串

01084700069811461719010010285322921DA192089940088
01084700088763891719050010BM2120

那些字符串是数据矩阵字符串,我必须以这种方式拆分字符串

0108470006981146 17190100 102853229 21DA192089940088

0108470008876389 17190500 10BM2120

每个 block 以一个固定的代码开始,后面跟着数字或字符

  • 01 + 14 位数字
  • 17 + 6 位数字
  • 10 + 1 到 20 个字符
  • 21 + 1 到 20 个字符

我尝试使用正则表达式进行此操作,对于前两个 block 我没有问题,因为长度是固定的。我对第三个(和/或第四个) block 有问题。

我创建了这个正则表达式

/^(01\d{14})(?:(17\d{6}))*(?:(10\w*))*(?:(21\w*))*$/

对于这个字符串是正确的

01084700088763891719050010BM2120

Group 1. 0108470008876389 (ok)

Group 2. 17190500 (ok)

Group 3. 10BM2120 (ok)

但是对于另一个字符串

01084700069811461719010010285322921DA192089940088

正则表达式匹配

Group 1. 0108470006981146 (ok)

Group 2. 17190100 (ok)

Group 3. 10285322921DA192089940088 (no)

我无法创建能够正确匹配第三个和第四个 block 的正则表达式,因为没有固定长度的字符并且因为在第三个 block 中可能存在字符串“21”也是下一个区 block 的起始码。

可以创建一个正确匹配字符串所有部分的正则表达式。

感谢大家

最佳答案

你可以使用

^(01\d{14})(17\d{6})?(10\w{1,20})?(21\w{1,20})?$

参见 regex demo

请注意,如果您打算对其进行量化,则不必将捕获组与非捕获组包裹起来,您可以直接对捕获组进行量化。

此外,要使组可选,使用 ? 量词就足够了,因为 * 匹配 0 次或多次出现。

图案细节

  • ^ - 字符串的开始
  • (01\d{14}) - 第 1 组:01 和 24 位数字
  • (17\d{6})? - 第 2 组(可选):17 和 6 位数字
  • (10\w{1,20})? - 第 3 组(可选):10 和 1 到 20 个字符
  • (21\w{1,20})? - 第 4 组(可选):21 和 1 到 20 个字符
  • $ - 字符串结尾。

请注意,要仅匹配字母数字字符,您需要将 \w 替换为 [^\W_] 因为 \w 也匹配 _

关于javascript - 匹配不定长字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com