首页 > 解决方案 > 正则表达式 exec 返回 null 或正常值

问题描述

正则表达式在返回正常值和 null 之间交替。我试着用谷歌搜索,好吧,我找不到任何东西。

const functionCall = /(?<name>\w+)\((?<s>\))?/g;
for(let i = 0; i < 100; i++) {
    const func = functionCall.exec("s(1, 2)");
    console.log(func)
}

在控制台中

Array(3) [...]
null
Array(3) [...]
null
...

标签: javascriptregex

解决方案


全局正则表达式在调用lastIndex时会更新其属性exec。下次exec调用时,只会从那个开始搜索lastIndex

在您的示例中,第一次迭代将找到匹配项并推进lastIndex. 下一次迭代将找不到从该索引开始的匹配项,因此lastIndex将重置为0. 这每 2 次迭代重复一次。

删除该g标志将使正则表达式不再是有状态的。

const functionCall = /(?<name>\w+)\((?<s>\))?/;
for(let i = 0; i < 100; i++) {
    const func = functionCall.exec("s(1, 2)");
    console.log(func)
}


推荐阅读