正则表达式部分与字符串

时间:2017-08-24 14:55:14

标签: javascript regex

我有一个这样的对象:

"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 + ')', 'gi');
var counter = 0;
for (var key in info) {
    if (key.match(regex)) {
        counter++;
    }
}
console.log("count---------  " + counter)
return counter;
  }

countAccurrencies的输出(info,' interval')---> count = 4这是错误的,但我希望count = 2 超出计数的货币(信息,' intervalSat)---> count = 2,它是对的 如果有人指导我会很棒。谢谢。

2 个答案:

答案 0 :(得分:1)

我认为你在这种情况下误解了正则表达式。

(interval)将匹配包含" interval"的anystring是否是" interval10"或" 10interval"。

如果你的"键"结构为" key"," key1"," key2"然后你应该匹配"键"部分加数字:

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");




答案 1 :(得分:0)

这是有效的,你要检查是否有间隔'存在于字符串中,当然还有“intervalSat”#39;包括单词interval。您需要一个不同的方法,或者只允许在keyName之后使用数字的正则表达式。我还建议不要使用" object"作为一个变量名,我相信你有一个拼写错误" inerval"虽然我不确定逻辑是否符合你的期望。