2017-09-13 149 views
-1

所以我有一个文本:regex.exec运行永远

上诉委员会已决定确认租金董事会的决定。这意味着,租金从207,437.60 KR降低,对应于1152 KR。 每。平方米至180,000 KR。,对应于1000 KR每。平方米。 (异议)
减租会从每1周2011年1月
步骤租金上涨的影响。 2011年7月1也可能不被批准。 租金必须继续180.000 KR。一年从该日期。
存款是按比例缩小到45000 KR,相当于3个月 批准的租金和预付租金30000克朗相当于批准租金2 个月。房东有义务在 利益法从付款时间偿还 多缴的房租,押金和预付租金利息。请参阅房租法§ 113一见。附件。多缴的房租,押金,预付款 不迟于8月1日的租金和利息偿还,2012被认为是 违反这些规定。

然后følgende片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); 

通知ATT变量breadText是上述所示的文本

运行,这将导致一个永远的环路( while循环)将永远运行和不断增加的结果相同的两个比赛阵列。

我根本无法理解,为什么?

任何人都可以看到香港专业教育学院做错了?

+2

是什么模式?必须匹配一个空字符串。 –

+3

stedet ATT环,只是使用'= string.match进行匹配(正则表达式)'。 – Cerbrus

+0

加入这一行的'while'循环中,如果'(match.index === regex.lastIndex)regex.lastIndex ++;' – anubhava

回答

1

stedet ATT循环,只需使用var matches = string.match(regex)

如果你构建你的正则表达式不当,不应该是没有必要到环单独的比赛,特别是没有,如果你只是要去两个推的结果为数组丙氨酰方式。

+0

我几乎酸性这不会起作用,因为正则表达式包含全局修改(否则,BOR没有'while')和全球在使用调节剂,'匹配()'不记得捕获的值。这只是整个提取匹配良好。 –

+0

@WiktorStribiżew:' “1234” .match(/ \ d /)vs.'' “1234” .match(/ \ d /克)'。 '.match'不正是你需要的'g'标志是什么。 – Cerbrus

+0

它不会那么容易,如果你需要两个只能得到一个捕获组值。您将需要通过匹配对象在两个循环。 –