遍历javascript中的一组正则表达式

遍历javascript中的一组正则表达式,javascript,regex,for-loop,Javascript,Regex,For Loop,我在一个对象中存储了一组正则表达式,其样式为 myRegexes = {}; myRegexes.reg1 = /[a-z]+[0-9]+/; myRegexes.reg2 = /[a-e]+/; 然后我可以执行myRegexes.reg1.exec(sampleStr),它工作得非常好 但是,如果我在这个对象中循环并说 for( reg in myRegexes ){ reg.exec(sampleStr); } 我得到一个异常,说“TypeError:objectreg1没有方法

我在一个对象中存储了一组正则表达式,其样式为

myRegexes = {};
myRegexes.reg1 = /[a-z]+[0-9]+/;
myRegexes.reg2 = /[a-e]+/;
然后我可以执行
myRegexes.reg1.exec(sampleStr)
,它工作得非常好

但是,如果我在这个对象中循环并说

for( reg in myRegexes ){
    reg.exec(sampleStr);
}
我得到一个异常,说“TypeError:objectreg1没有方法'exec'”


我知道javascript在如何处理in循环方面是不可靠的,但我不知道它是如何成功地找到变量的,而是在过程中丢失了它的方法。有人能告诉我为什么失败以及正确的方法是什么吗?

reg
指的是属性名称,您必须获取实际的regex对象:

for( reg in myRegexes ) {
  myRegexes[ reg ].exec(sampleStr);
}
枚举对象的属性,
reg
是属性名称(字符串),而不是属性值(正则表达式)。使用


JavaScript在for循环中并不是很可靠。它只是不做你认为它做的:)我在想你应该使用hasOwnProperty来避免不需要的工件的实例。在本例中,我只是没有理解基本知识;它们基本上是散列键,所以当你在它们上面循环时,你就这样对待它们。下面的答案给出了更多的细节,但这就是要点。定义对象的属性相当于创建哈希表。
for (reg in myRegexes)
    myRegexes[reg].exec(sampleStr);