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