正则表达式exec函数不能多次运行

Jeu*_* Oh 3 javascript regex

var ts = "00:00:06,705";

var regularExpression = /([0-9]+):([0-9]{2}):([0-9]{2}),([0-9]{3})/g;
var parsedTs1 = regularExpression.exec(ts);
var parsedTs2 = regularExpression.exec(ts);
Run Code Online (Sandbox Code Playgroud)

parsedTs1 显示正确的结果,但运行此脚本后,parsedTs2 变量为 null。

但是当我们删除最后一个“g”字符时,效果很好。

根据文档,选项标志 g 表示全局搜索,与本例无关。

如何多次使用定义的正则表达式字符串来匹配字符串呢?

Dar*_*rov 6

引用自here

正则表达式对象维护状态。例如,exec方法不是幂等的,连续调用可能返回不同的结果。对 exec 的调用具有此行为,因为正则表达式对象会记住全局标志设置为 true 时所搜索的最后位置。

如果您想多次调用它,您可以在每次调用后手动重置最后一个索引:

var parsedTs1 = regularExpression.exec(ts);
regularExpression.lastIndex = 0;
var parsedTs2 = regularExpression.exec(ts);
Run Code Online (Sandbox Code Playgroud)