具有填充的特定长度正则表达式

时间:2017-06-22 17:22:08

标签: javascript regex

目标:为较大字符串中的固定长度字符串制作广义正则表达式。此字符串具有指定的填充字符,后跟一个递增的整数计数器。理想情况下,会有一些方法可以说,"我希望这个组的长度为10,并且只包含一种类型的字符,后跟不同的字符。"

我想在可变数据中匹配这个(可能是数字可能是字母可能是符号): 填充字符+数字加起来指定长度,这里是5.

这些是允许的填充+数字组合。

$$$$1
$$$12
$$123
$1234

以下是一个例子:

<variable-data> <padding-characters> <numbers> <variable-data>
............... .................... ddddddddd ............... 
(where periods are any characters and 'd' is any digit)

Example Data:
ABC              $$$$                 1         $!@

Example Regex: 
ABC\$*\d+\$!@

Match: 
ABC$$$$1$!@
ABC$$$12$!@
ABC$$123$!@
ABC$1234$!@
ABC12345$!@

No Match:
ABC$$123456789$!@
ABC1$2$34$!@

Regex101

我尝试过的事情:

ABC(?=.{5})\$*\d+\$!@

这不起作用,因为\d+因为它仍匹配到下一个数字。我尝试的另一件事是

ABC(?=[\$\d]{5}[^\$\d])(\$*\d+)\$!@

其中的目的是停止遇到非数字或非$,但这没有用,因为字符串COULD的下一部分以$或数字开头。

解决此问题的最简单的正则表达式:

(\$\$\$\$\d|\$\$\$\d\d|\$\$\d\d\d|\$\d\d\d\d|\d\d\d\d\d)

但是我试图让这更加普遍,并且可以有不同数量的填充E.G.

$$$$$$$$$1
$$$$$$$$12
...

2 个答案:

答案 0 :(得分:3)

你可以向前看,检查你在接下来的5个字符的范围内没有倒置的填充字符和数字序列,然后需要并捕获5个只有数字和填充字符的字符:

ABC(?!.{0,3}\d\$)([\$\d]{5})\$!@

如果您需要至少一个数字,那么:

ABC(?!.{0,3}\d\$)([\$\d]{4}\d)\$!@

答案 1 :(得分:2)

ABC(?=.{5}\$!@)\$*\d+\$!@

这与您的第一次尝试非常相似,但稍有不同,前瞻也包含终止字符串。这给了它固定的东西,以确保正则表达式不再匹配任何东西。