2016-08-12 75 views
1
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变量为空。正则表达式exec函数不能多次工作

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

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

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

+0

什么是储存在'无功parsedTs1' –

+0

使用'.test'或'字符串值#search'由于以下答案中给出的原因 –

+0

'/ g'标志允许正则表达式遍历同一个字符串内的多个不重叠匹配。当它返回'null'时,它告诉你没有更多的匹配。 –

回答

2

引用:

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

如果你想将它命名多次,你可以手动重置最后一个索引每次通话后:

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

更好的引用和解释可以在http://stackoverflow.com/questions/11477415/why-does-javascripts-regex-exec-not-always-return-the-same-value找到。 –