Javascript 带填充的特定长度正则表达式
目标:为较大字符串中的固定长度字符串生成通用正则表达式。此字符串具有指定的填充字符,后跟递增的整数计数器。理想情况下,可以用某种方式说,“我希望这个组的长度为10,并且只包含一种类型的字符,后面跟一个不同的字符。” 我试图在变量数据中匹配这一点(可能是数字,可能是字母,可能是符号): 填充字符+数字加起来等于指定的长度,这里是5 这些是允许的填充+数字组合Javascript 带填充的特定长度正则表达式,javascript,regex,Javascript,Regex,目标:为较大字符串中的固定长度字符串生成通用正则表达式。此字符串具有指定的填充字符,后跟递增的整数计数器。理想情况下,可以用某种方式说,“我希望这个组的长度为10,并且只包含一种类型的字符,后面跟一个不同的字符。” 我试图在变量数据中匹配这一点(可能是数字,可能是字母,可能是符号): 填充字符+数字加起来等于指定的长度,这里是5 这些是允许的填充+数字组合 $$$$1 $$$12 $$123 $1234 以下是一个例子: <variable-data> <padding-ch
$$$$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$!@
由于\d+
的原因,它仍然匹配到下一个数字,因此不起作用。我试过的另一件事是
ABC(?=[\$\d]{5}[^\$\d])(\$*\d+)\$!@
它的目的是在遇到非数字或非$时停止查找,但这没有帮助,因为字符串的下一部分可能以$或数字开头
解决此问题的最简单正则表达式:
(\$\$\$\$\d|\$\$\$\d\d|\$\$\d\d\d|\$\d\d\d\d|\d\d\d\d\d)
但我试图让它更一般化,可以有不同数量的填充,例如
$$$$$$$$$1
$$$$$$$$12
...
这与您的第一次尝试非常相似,但略有不同的是,lookahead还包含终止字符串。这给了它一些锚定的东西,以确保正则表达式不再匹配任何东西
这与您的第一次尝试非常相似,但略有不同的是,lookahead还包含终止字符串。这为它提供了一些定位点,以确保正则表达式不再匹配任何内容。您可以向前看,检查在接下来的5个字符范围内是否没有填充字符和数字的倒序,然后需要并捕获5个仅为数字和填充字符的字符: 如果您至少需要一位数字,则:
您可以向前看,检查在接下来的5个字符范围内是否没有填充字符和数字的倒序,然后需要并捕获5个仅为数字和填充字符的字符: 如果您至少需要一位数字,则:
你的意思是完成变量数据根本不会以数字开始吗?@revo我不确定在运行之前会是什么。它们都是用户定义的。它们肯定是数字。因此,输入字符串ABC$$$$11!@存在并且应该匹配?是的,很遗憾。我试图用括号中的句号和“d”来表达这一点。那么为什么你说ABC$$123456789$不匹配呢@代码>。根据您的要求,它应该匹配。您的意思是完成变量数据根本不会以数字开始吗?@revo我不确定在运行之前会是什么。它们都是用户定义的。它们肯定是数字。因此,输入字符串ABC$$$$11!@存在并且应该匹配?是的,很遗憾。我试图用括号中的句号和“d”来表达这一点。那么为什么你说ABC$$123456789$不匹配呢@代码>。根据您的要求,它应该匹配。谢谢,我想要一些不依赖于下一个令牌的东西。这似乎回答了我最初的问题。谢谢,不过我想要的东西不依赖于下一个标记。这似乎回答了我最初的问题。
$$$$$$$$$1
$$$$$$$$12
...
ABC(?=.{5}\$!@)\$*\d+\$!@