Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.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 使用正则表达式仅检索具有7位数字的字符串_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 使用正则表达式仅检索具有7位数字的字符串

Javascript 使用正则表达式仅检索具有7位数字的字符串,javascript,jquery,regex,Javascript,Jquery,Regex,简言之,页面包含大约10个div,每个div包含字母和数字,我试图返回所有恰好出现的7位数字,但前后可以有其他非数字字符 例如 “q1234567”应返回1234567 “q1234567q”应返回1234567 “q1234567q1234567q12345678q”应返回1234567和1234567 不应返回“12345678” 更具体地说,一个完整字符串的示例: q1234567q q1234567q q12345678q q1234567q123456789q123456q132456

简言之,页面包含大约10个div,每个div包含字母和数字,我试图返回所有恰好出现的7位数字,但前后可以有其他非数字字符

例如

“q1234567”应返回1234567

“q1234567q”应返回1234567

“q1234567q1234567q12345678q”应返回1234567和1234567

不应返回“12345678”

更具体地说,一个完整字符串的示例:

q1234567q
q1234567q
q12345678q
q1234567q123456789q123456q1324567q1234567
1234567
1
12
123
1234
12345
q12345q
q1234
12345q
123
我试着通过regex做这件事

/\d{7}(?=\D|$)/g

但是JavaScript不能很好地处理lookback。。如何在不涉及整个新库的情况下解决此问题?

如何:
(?此正则表达式应该可以:

/^\D*\d{7}\D*$/
在线演示: 更新:根据下面编辑的问题和评论,您可以使用此正则表达式:

(?:^|\D)(\d{7})(?=\D|$)
并使用匹配的组#1作为输出

演示: [“1234567”、“1324567”]

这个怎么样:

/(^ |\D)\D{7}(\$\124;\ D)/gm


你可以用这样的东西吗

var regex = /(?:^|\D)(\d{7})(?!\d)/g;
var s = "q1234567q123456789q123456q1324567q1234567";
var match, matches=[];

while ( (match=regex.exec(s)) !== null ) {
    matches.push(match[1]);
}

alert(matches);

JavaScript仍然不能很好地处理lookbehind。只需使用捕获组,然后
.exec
而不是
.match
并抓取
匹配[i][1]
。它只在整行正好有7位数字的情况下才起作用。这不一定是这样,请参阅edit+1,不是关于答案,而是关于使用regex101。我不知道这一点,这对我来说是新的。@user3258911:
q1234567q123456789q123456q1324567q1234567的返回值应该是什么?您还可以包括预期的输出吗在关于最新编辑的输入字符串的问题中。@anubhava应该如前所述,一行中恰好出现7位数字。因此1234567、1324567和1234567非常接近,但在这样一个字符串中会出错:Q1234567Q123456789Q123456Q1324567Q1234567Q1234567Q1234567这似乎已经解决了它!谢谢。请注意解释如何使用exec()而不是匹配有区别吗?@user3258911
match
在找到匹配项时结束,并返回所有匹配项:当
g
关闭时,返回整个匹配项和所有子匹配项;当
g
打开时,返回所有完整匹配项。
exec
另一方面匹配到一个点,当您再次调用它时,它会尝试从它的点开始匹配匹配已提前结束。这使代码能够在每次有一个匹配时获取每个子匹配,并且仍然查找所有匹配。
var regex = /(?:^|\D)(\d{7})(?!\d)/g;
var s = "q1234567q123456789q123456q1324567q1234567";
var match, matches=[];

while ( (match=regex.exec(s)) !== null ) {
    matches.push(match[1]);
}

alert(matches);