本地正则表达式匹配变量未更新
Local Regex Match Variable Not Updated
我正在循环遍历一个对象数组并将它们映射到我自己的自定义对象。我通过正则表达式提取数据。我的第一次循环运行得很好,但在随后的迭代中,尽管它们匹配,但没有设置匹配变量。
下面是一个正则表达式:
var gameRegex = /('^?)([A-z]+)'s?('d+)?'s+(at's)?('^?)([A-z]+)'s?('d+)?'s'((.*)')/g;
这是我的循环的初始部分:
for(var i = 1; i <= data.count; i++) {
var gameMatch = gameRegex.exec(data["left" + i]);
var idMatch = idRegex.exec(data["url" + i]);
第一次通过,gameMatch和idMatch有值。下面的迭代不能工作,即使我已经测试过它们可以工作。
是否有一些关于正则表达式,也许特别是在Node.js,我需要做的,如果我使用它们不止一次?
当你有一个全局标志为/.../g
的正则表达式并使用exec()
时,JavaScript会在该正则表达式上设置一个名为lastIndex
的属性。
s = "abab";
r = /a/g;
r.exec(s); // ["a"]
r.lastIndex // 1
r.exec(s); // ["a"]
r.lastIndex // 3
r.exec(s); // null
r.lastIndex // 0
这意味着用于同一字符串中的多个匹配。您可以一次又一次地调用exec()
,并且每次调用lastIndex
都会增加—自动定义下一次执行的开始位置:
while (match = r.exec(s)) {
console.log(match);
}
现在lastIndex
将在exec()
的第一次调用后关闭。但是由于每次传入的字符串不同,表达式将不再匹配。
有两种方法可以解决这个问题:
- 每次手动设置
r.lastIndex = 0
或 - 删除
g
全局标志
在你的情况下,后一个选项将是正确的。
进一步阅读:
-
.exec()
在MDN上 - MSDN上的
.exec()
- "How Use The JavaScript RegExp Object" on regular-expressions.info
相关文章:
- React:使用索引变量更新嵌套集合
- 范围变量更新,但不更新视图
- 正在将代码库中的C#变量更新到asp.net
- 使用变量更新剑道图表系列的数据会导致重绘将列从图表上绘制出来
- MongoDB 用变量更新数组
- 将变量更新为函数中的参数
- Javascript-变量更新
- 使用Javascript和PHP变量更新页面上的数据
- Angular js 在
标签上的变量更新$scope动画
- 如何通过参数变量更新对象的属性值
- 如何在范围变量更新时更新模板
- 简单的变量更新和写入页
- 函数在变量更新后的某个时间点执行
- javascript OO如何用一些JSON变量更新self参数
- 使用$set中的变量更新mongodb的node.js
- 将声明的null变量更新为布尔值
- 在查询部分使用变量更新查询
- 如何在回调中使用变量更新文档?
- 通过AJAX用PHP变量更新URL
- 防止在没有javascript的情况下在页面刷新后进行变量更新