【发布时间】:2017-06-22 17:22:07
【问题描述】:
目标:为较大字符串中的固定长度字符串生成通用正则表达式。此字符串具有指定的填充字符,后跟一个递增的整数计数器。理想情况下,可以通过某种方式说,“我希望这个组的长度为 10,并且只包含一种类型的字符,后跟一个不同的字符。”
我试图在变量数据中匹配这个(可能是数字可能是字母可能是符号): padding-characters + numbers 加起来是一个指定的长度,这里是 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$!@
我的尝试:
ABC(?=.{5})\$*\d+\$!@
这不起作用,因为由于\d+,它仍然匹配到下一个数字。我尝试的另一件事是
ABC(?=[\$\d]{5}[^\$\d])(\$*\d+)\$!@
它的目的是在遇到非数字或非 $ 时停止查找,但这没有帮助,因为字符串的下一部分可以以 $ 或数字开头。
解决这个问题的最简单的正则表达式:
(\$\$\$\$\d|\$\$\$\d\d|\$\$\d\d\d|\$\d\d\d\d|\d\d\d\d\d)
但我试图使这个更通用,并且可以有可变数量的填充 E.G.
$$$$$$$$$1
$$$$$$$$12
...
【问题讨论】:
-
你的意思是完成 variable-data 根本不会以数字开头?
-
@revo 我不确定任何
在运行前会是什么。它们都是用户定义的。它们肯定是数字。 -
那么这样的输入字符串 ABC$$$$11!@ 的可能性存在并且应该匹配?
-
是的,很遗憾。我试图用括号本身的句点和“d”来传达这一点。
-
那你为什么说
ABC$$123456789$!@的不匹配。根据您的要求,它应该匹配。
标签: javascript regex