Javascript 匹配无固定长度字符串的正则表达式
我有一根这样的弦Javascript 匹配无固定长度字符串的正则表达式,javascript,regex,alphanumeric,Javascript,Regex,Alphanumeric,我有一根这样的弦 01084700069811461719010010285322921DA192089940088 01084700088763891719050010BM2120 这些字符串是datamatrix字符串,我必须以这种方式拆分字符串 0108470006981146 17190100 102853229 21DA192089940088 0108470008876389 17190500 10BM2120 每个块以一个固定的代码开头,后面是数字或字符 01+14位 17
01084700069811461719010010285322921DA192089940088
01084700088763891719050010BM2120
这些字符串是datamatrix字符串,我必须以这种方式拆分字符串
0108470006981146 17190100 102853229 21DA192089940088
0108470008876389 17190500 10BM2120
每个块以一个固定的代码开头,后面是数字或字符
- 01+14位
- 17+6位
- 10+从1个字符到20个字符
- 21+从1个字符到20个字符
/^(01\d{14})(?:(17\d{6}))*(?:(10\w*))*(?:(21\w*))*$/
因为这个字符串是正确的
01084700088763891719050010BM2120
Group 1. 0108470008876389 (ok)
Group 2. 17190500 (ok)
Group 3. 10BM2120 (ok)
但对于另一根弦
01084700069811461719010010285322921DA192089940088
regexp匹配
Group 1. 0108470006981146 (ok)
Group 2. 17190100 (ok)
Group 3. 10285322921DA192089940088 (no)
我无法创建能够正确匹配第三个和第四个块的regexp,因为没有固定长度的字符,并且第三个块中可能有字符串“21”,这也是下一个块的开始代码
可以创建一个与字符串的所有部分正确匹配的正则表达式
感谢所有您可以使用
^(01\d{14})(17\d{6})?(10\w{1,20})?(21\w{1,20})?$
见
请注意,您不必将捕获组与非捕获组包装在一起。如果您计划对它们进行量化,则可以直接对捕获组进行量化
另外,要使组成为可选的,使用?
量词就足够了,因为*
匹配0个或更多的匹配项
图案细节
-字符串的开头^
-第1组:(01\d{14})
和24位数字01
-第2组(可选):(17\d{6})
17和6位数字
-第3组(可选):(10\w{1,20})
和1到20个单词字符10
-第4组(可选):(21\w{1,20})
和1到20个单词字符21
-字符串结束$
\w
替换为[^\w\u]
,因为\w
也匹配\uvar inputValue=“01084700088763891719050010BM2120”
var regexpr=/(01-d{14})(17-d{6})(10[A-Za-z0-9]{1,20})(21[A-Za-z0-9]{1,20})/
inputValue.replace(regexpr,“$1$2$3$4”)
输出将是:
“0108470008876389 17190500 10BM 2120”
变量输入值=“01084700069811461719010010285322921DA192089940088”
var regexpr=/(01-d{14})(17-d{6})(10[A-Za-z0-9]{1,20})(21[A-Za-z0-9]{1,20})/
inputValue.replace(regexpr,“$1$2$3$4”)
输出将是:
“010847000698114617190100 102853229 21DA192089940088”
如果这些块是连续的,b
、c
或d
可以是可选的,请尝试。第三个和第四个块以“10”和“21”开头,在正则表达式中由(?(10\w))*(?:(21\w*)*部分匹配。第三个区块以“10”开头,can内包含数字21,但21也是第四个区块的起始代码。两个块都没有固定的长度请参见。这是你想要达到的吗?好球。似乎工作得很好!:D谢谢,你救了我一天为什么0108470008876389 17190500 10BM 2120
无效?我喜欢regexp,但也很危险:D.你有这样的资源来掌握regexp吗?@AngelPoyel这种regex知识并不先进,你可以在。从\w
中减去\u
有点“隐藏”,您可以在下面了解这一点。