我试图找到最短,最容易阅读,不要重复自己的方法,以便在将所有变量保持在块范围内的同时执行循环全局exec

我在顶级范围内有一个字符串:

const str = 'AaAa';


我现在不想再污染这个顶级水平,并且想要一个简短的循环循环来迭代所有比赛。

我目前正在这样做:

const patt = /a/ig;
let match;
while (match = patt.exec(str)) {
   console.log(match);
}


但是,这会将match和patt放入顶级范围(假设我不将其包装在一个块中)

这可行,但是我必须在match=patt.exec(str)的初始化部分和for的重复部分中重复for

for (let patt = /a/ig, match=patt.exec(str); match; match=patt.exec(str)) {
    console.log('match:', match);
}


关于在不重复match=patt.exec(str)的情况下如何进行此操作是否有任何想法? (理想情况下,patt应该是const patt而不是let patt,因为它有助于提高易读性,使其更加易懂)

理想的情况是这样的伪代码:

for (const patt = /a/ig, let match=patt.exec(str); match;) {
    console.log('match:', match);
}

最佳答案

你只要写

{
    const patt = /a/ig;
    for (let match; match=patt.exec(str); ) {
        console.log('match:', match);
    }
}


您不能在let循环头中将constfor语句组合在一起。

您可能要离开周围的区域,将const patt放在与const str相同的范围内应该没有什么问题。

09-16 22:13