Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 正则表达式不匹配具有10个连续数字的字符串。数字可以用空格分隔。所有其他字符串返回一个匹配项_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式不匹配具有10个连续数字的字符串。数字可以用空格分隔。所有其他字符串返回一个匹配项

Javascript 正则表达式不匹配具有10个连续数字的字符串。数字可以用空格分隔。所有其他字符串返回一个匹配项,javascript,regex,Javascript,Regex,我有一个5/7单元测试通过的代码笔。卡在以非数字字符开头的字符串上 var regexString=/^\D*(?!(\s*\D\s*){10,}.*/; var测试=[{ 文本:“abc123”, 伊斯马特:没错 }, { 文本:“1234567890”, 伊斯马特:错 }, { 文本:“123456789”, 伊斯马特:没错 }, { 文本:“abc1234567890efg”, 伊斯马特:错 }, { 正文:“123456789123”, 伊斯马特:错 }, { 文字:“abc1234

我有一个5/7单元测试通过的代码笔。卡在以非数字字符开头的字符串上

var regexString=/^\D*(?!(\s*\D\s*){10,}.*/;
var测试=[{
文本:“abc123”,
伊斯马特:没错
}, {
文本:“1234567890”,
伊斯马特:错
}, {
文本:“123456789”,
伊斯马特:没错
}, {
文本:“abc1234567890efg”,
伊斯马特:错
}, {
正文:“123456789123”,
伊斯马特:错
},
{
文字:“abc1234567890”,
伊斯马特:错
}, {
文本:“1234567890efg”,
伊斯马特:错
}
];
log(newdate().toString());

tests.map(test=>console.log(test.text,regexString.test(test.text)==test.ismatch))
^\D*(?!
有关的问题是,即使在负前瞻中发现了长数字/空格字符串,由
\D
匹配的部分在负前瞻匹配后将简单地回溯一个字符。例如

^\D*(?!\d{10,}).*
火柴

abc1234567890
\D*
匹配
ab
*
匹配
c1234567890
b
c
之间的位置后面不会紧跟一个长的数字/空格子字符串,因此匹配不会失败

此外,由于某些数字可能位于10个连续数字之前,因此开头的
^\D*
是不够的-例如,如果输入是
1a01234567890
,请尝试

^(?!.*(\d\s*){10}).*
这可确保每个位置后面不跟(10位数字,可能用空格分隔)

如果数字只能出现在字符串中的一个块中(可能由空格分隔),那么如果您所在的环境支持所有格量词,这会阻止回溯,那么您的模式就会起作用,例如:

^\D*+(?!(\s*\d\s*){10,}).*
    ^


(不幸的是,Javascript不支持这种语法)

但是您的正则表达式匹配
abc123
…我认为它应该匹配?
{text:'abc123',ismatch:true}
-他希望它是匹配的,因为在itoh中没有连续的10位数/空格的字符串…我认为至少10位数是基于
{10,}
-我想这是OP犯了很多错误之一:p@Emma他希望日志中的每一行都显示
true
^\D*+(?!(\s*\d\s*){10,}).*
    ^