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

时间:2016-08-12 05:08:37

标签: 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);

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

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

根据文件,选项标志g表示全局搜索,这与此案例无关。

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

1 个答案:

答案 0 :(得分:2)

引自here

  

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

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

var parsedTs1 = regularExpression.exec(ts);
regularExpression.lastIndex = 0;
var parsedTs2 = regularExpression.exec(ts);