Javascript正则表达式和

Javascript正则表达式和,javascript,regex,Javascript,Regex,我想得到整条线的结果 当该行有8个或更多数字时 及 当每行任意数字之间有超过1个空格时 但是我如何用正则表达式检查它呢?我已经试过/((?:\d{8,})(?:[.*]{2,}))/g,但它不起作用。(当然我也试过很多其他的表达方式) 这是要测试的列表: yes: 123 456 789 0123 1 2345 678 123 123 123123 1 2 3 4 5 6 7 8 no (it has less than 2 spaces): 1231 23123123 no (it has

我想得到整条线的结果

当该行有8个或更多数字时

当每行任意数字之间有超过1个空格时

但是我如何用正则表达式检查它呢?我已经试过
/((?:\d{8,})(?:[.*]{2,}))/g
,但它不起作用。(当然我也试过很多其他的表达方式)

这是要测试的列表:

yes:
123 456 789 0123
1 2345 678
123 123 123123
1 2 3 4 5 6 7 8

no (it has less than 2 spaces):
1231 23123123
no (it has less than 8 digits)
1 2345 67
我准备了这个,在这里你可以玩=)


谢谢你的帮助

您可以使用这个基于前瞻的正则表达式:

/^(?=(.*?\d){8})(?=(\S* ){2}).+$/gm

第一个前瞻是确保至少有8位数字,第二个前瞻是确保至少有2个空格

/^(?=.* .* )(\d *){8,}$/gm
  • ^
    将正则表达式锚定在行的开头

  • (?=.*.*)
    先行断言。检查该行是否包含2个空格

  • (\d*){8,}
    匹配行中的
    8
    数字

  • $
    将regex锚定在末尾


这是我发现的最简单的正则表达式,没有perl和friends的前瞻性和扩展特性。当然,数字可以缩写为\d,也可以使用{n1,n2}符号重复

\([0-9]*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*\ .*\ .*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9].*\ .*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9].*\ .*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9].*\ .*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9][0-9]*\|[0-9]*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*\ .*\ .*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9].*\ .*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9].*\ .*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*\ .*\ .*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9].*\ .*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*[0-9].*\ .*\ .*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*\ .*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*\ .*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*\ .*[0-9].*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*[0-9].*\ .*\ .*[0-9].*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*\ .*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*\ .*[0-9].*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*[0-9].*\ .*\ .*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*\ .*[0-9].*\ .*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\|[0-9]*[0-9].*\ .*\ .*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*[0-9].*[0-9][0-9]*\)

很抱歉发生水灾。它可以识别每个至少有八位数字和两个空格的字符串。它可以散布非数字字符。如果你不想要他们,可以安排不允许他们。DFA远比这简单。这样写的,可以在vim(1)中用作搜索字符串,它将从行中最左边的数字匹配到最右边的数字(不包括额外的空格)

Imho,这将非常容易,只需在空格上进行简单的拆分,然后计算您需要计算的数字(空格、数字)。@BastiM,更容易,但效率要低得多,由于要对数据进行多次传递(一次获取,一次计数),正则表达式编译器会生成一个一次传递DFA或NFA,允许您在一次传递中获取匹配项。@nu11p01n73R和anubhava:谢谢您的帮助,但在我的正则表达式中它不起作用。你能告诉我为什么吗?我有一个很长的正则表达式,几乎可以完美地工作。现在我想排除不带空格且少于8位数的匹配项。所以我在我的整个正则表达式前面加了(?=(.*?\d){8,}),但是如果后面有更多的数字,它也匹配+33(33)3。排除不包含空格的数字也不起作用(在我的示例regex中不是这样)。这个答案是针对您在上面提出的问题,并与答案中显示的示例数据一起使用。我建议用电话号码问题来创建一个新问题,并在这里接受一个有效的解决方案。啊,好的,这就是它的工作原理=)对不起,我不知道。我会问一个新问题。无论如何谢谢你