javascript - 正则表达式 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
...
解决方案
全局正则表达式在调用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)
}
推荐阅读
- firebase - 一个受欢迎的项目将如何处理每个项目的主题订阅速率限制?
- node.js - 错误:在建立连接之前关闭了 WebSocket
- c++ - 应该 set::equal_range() 返回对( set::lower_bound(), set::upper_bound() )
- asp.net-core - System.MissingMethodException:'方法未找到:
- java - 处理 Java Akka 流中不断变化的源数据
- java - Java PriorityQueue 如何对元素进行排序
- selenium - 使用 Selenium c# 自动化日期选择器
- python - 为什么 my_list *= 2 和 my_list = my_list * 2 在以 my_list 作为参数的函数中产生不同的结果?
- flutter - 仅在服务器发生更改时更新 UI,使用 streambuilder
- kubernetes - 我们如何在多个 terraform 提供者中创建相同的资源?