我有一个这样的对象:
"info" : {
"interval": "Mon-Fri 8-11",
"interval1": "Mon-Fri 17-20",
"intervalSat": " Sat 8-11",
"intervalSat2": "Sat 17-20"
}
我想找出间隔或intervalSat发生了多少次,而不管它们的索引是什么。我的示例代码在这里,但它不能正常工作。
function countAccurrencies(info, keyName) {
var regex = new RegExp('(' + keyName + ')', 'gi');
var counter = 0;
for (var key in info) {
if (key.match(regex)) {
counter++;
}
}
console.log("count--------- " + counter)
return counter;
}
countAccurrencies(info,‘countAccurrencies’)-> count =4的输出是错误的,但我希望count =2 out of interval(info,‘intervalSat)-> count =2,这是正确的,如果有人指导我就太好了。谢谢。
发布于 2017-08-24 23:23:50
在这种情况下,我认为您误解了正则表达式。
(interval)
将匹配任何包含"interval“的字符串,无论它是"interval10”还是"10interval“。
如果您的"key“结构为"key”、"key1“、"key2”等,那么您应该匹配“key”部分加上数字:
keyName + '[0-9]?$'
是您想要的正则表达式。0-9?$表示字符串中的最后一个字符是数字0-9,然后是字符串的结尾,如果没有数字,则只是字符串的结尾。
var info = {
"interval": "Mon-Fri 8-11",
"interval1": "Mon-Fri 17-20",
"intervalSat": " Sat 8-11",
"intervalSat2": "Sat 17-20"
};
function countAccurrencies(info, keyName) {
var regex = new RegExp(keyName + '[0-9]?$', 'gi');
var counter = 0;
for (var key in info) {
if (key.match(regex)) {
counter++;
}
}
console.log("count--------- " + counter)
return counter;
}
countAccurrencies(info, "interval");
countAccurrencies(info, "intervalSat");
发布于 2017-08-24 23:03:39
它正在工作,您正在检查字符串中是否存在' interval‘,当然'intervalSat’包含单词interval。您需要一种不同的方法,或者只允许keyName后面的数字的正则表达式。我还建议不要使用"object“作为变量名,我相信你有一个拼写错误的”惯性“,尽管我不确定逻辑是否如你所期望的那样。
https://stackoverflow.com/questions/45864806
复制相似问题