Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带填充的特定长度正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 带填充的特定长度正则表达式

Javascript 带填充的特定长度正则表达式,javascript,regex,Javascript,Regex,目标:为较大字符串中的固定长度字符串生成通用正则表达式。此字符串具有指定的填充字符,后跟递增的整数计数器。理想情况下,可以用某种方式说,“我希望这个组的长度为10,并且只包含一种类型的字符,后面跟一个不同的字符。” 我试图在变量数据中匹配这一点(可能是数字,可能是字母,可能是符号): 填充字符+数字加起来等于指定的长度,这里是5 这些是允许的填充+数字组合 $$$$1 $$$12 $$123 $1234 以下是一个例子: <variable-data> <padding-ch

目标:为较大字符串中的固定长度字符串生成通用正则表达式。此字符串具有指定的填充字符,后跟递增的整数计数器。理想情况下,可以用某种方式说,“我希望这个组的长度为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$!@
由于
\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+\$!@