Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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/17.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 regex.exec永远在循环中运行_Javascript_Regex_While Loop - Fatal编程技术网

Javascript regex.exec永远在循环中运行

Javascript regex.exec永远在循环中运行,javascript,regex,while-loop,Javascript,Regex,While Loop,所以我有一段文字: 在哈斯勒耶夫涅茨阿佛雷尔斯国家公园举行的一次新闻发布会。德特·梅德费雷尔,在莱扬-内德萨特fra 207.437,60克朗,斯瓦伦德直到1.152克朗。 每平方米至180.000克朗斯瓦伦德至1.000克朗每平方米。(disens) Lejenedsættelsen在一号公路上行驶。2011年1月。 Trappelejeforhøjelsen pr.1。朱莉·戈德肯德斯。 Lejen skal derfor fortsat være 180.000 kr.årligt fra

所以我有一段文字:

在哈斯勒耶夫涅茨阿佛雷尔斯国家公园举行的一次新闻发布会。德特·梅德费雷尔,在莱扬-内德萨特fra 207.437,60克朗,斯瓦伦德直到1.152克朗。 每平方米至180.000克朗斯瓦伦德至1.000克朗每平方米。(disens)
Lejenedsættelsen在一号公路上行驶。2011年1月。
Trappelejeforhøjelsen pr.1。朱莉·戈德肯德斯。 Lejen skal derfor fortsat være 180.000 kr.årligt fra denne dato.
存款人在荷兰银行存款至45000韩元,在荷兰银行存款至300万韩元 godkendt leje og forudbetalt leje至30000克朗斯瓦伦德至2克朗 måneders godkendt leje。Udlejer在tilbagebetale为 meget betalt leje医疗租赁公司的存款 renteloven fra betalingstidspunkterne。直到勒杰洛文斯为止§ 113 a,jf。比拉格。为meget betalt leje准备的tilbagebetaling af, 一号楼的出租人。2012年8月安塞索门酒店 这是我最好的朋友

然后是下面一段javascript代码:

function getMatches(string, regex, index) {
    index || (index = 1); // default to the first capturing group
    var matches = [];
    var match;
    while (match = regex.exec(string)) {
        matches.push(match[index]);
    }
    return matches;
}


var myString = breadText;
var myRegEx = regStr;

var matches = getMatches(myString, myRegEx, 1);

console.log(matches);
请注意,可变宽度文本是上面显示的文本

运行此操作将导致一个永久循环(while循环)将永久运行,并将相同的结果添加到matches数组中

我简直不明白为什么


有人能看到我做错了什么吗?

不用那个循环,只需使用
var matches=string.match(regex)


如果您正确地构造正则表达式,就不需要在单独的匹配上循环,尤其是如果您只是想以任何方式将结果推送到数组中。

模式是什么?它必须匹配一个空字符串。而不是该循环,只需使用
var matches=string.match(regex)
。在
循环中添加此行,而
if(match.index==regex.lastIndex)regex.lastIndex++
请将您正在使用的相关代码添加到问题中(必须包含正则表达式才能完全理解您的情况)。我几乎可以肯定,这不会起作用,因为正则表达式包含全局修饰符(否则,在使用全局修饰符时,不应该有
不记得捕获的值。它只适用于提取整个匹配项。@WiktorStribiżew:
“1234.match(/\d/)
vs
“1234.match(/\d/g)
.match
使用
g
标志可以完全满足您的需要。如果您只需要获取一个捕获组值,那么就不会那么容易了。您将需要遍历匹配对象。遍历有限数组比遍历不确定的正则表达式匹配集更不容易出错。使用您的代码,您可以。你需要。