Javascript计算String中Array的出现次数

时间:2013-11-06 10:50:48

标签: javascript

我需要计算字符串中数组的出现次数。我对;/()

等特殊字符有疑问
var msg = "hello world :)"; 
var tce = [":)", ":(", ":/" ];
var countOcurrences = 0;
for (var i = 0; i < tce.length; i++) {
  res = msg.match(/tce[i]/g);
  if (res != null) countOcurrences += res.length;
}

我认为通过正则表达式,它可能会变得更加容易。

4 个答案:

答案 0 :(得分:2)

忘记使用正则表达式,只需使用简单的indexOf来检查出现次数。这个功能可以帮到你:

function countMatches(str, find) {
    var count = 0;
    var index = str.indexOf(find);
    while (index != -1) {
        count++;
        index = str.indexOf(find, index + 1);
    }
    return count;
}

你可以这样使用:

var msg = "hello world :)";
var tce = [":)", ":(", ":/"];
var countOcurrences = 0;
for (var i = 0; i < tce.length; i++) {
    countOcurrences += countMatches(msg, tce[i]);
}

Here is a working example

答案 1 :(得分:0)

将数组值更改为:

var tce = [":\)", ":\(", ":/" ];

使用正则表达式时,您需要转义()

答案 2 :(得分:0)

事实上,你根本不需要任何循环。只需用备选方法(|)构建一个大的正则表达式,并将字符串与它匹配:

var tce = [":)", ":(", ":/"];

// http://stackoverflow.com/a/3561711/989121
RegExp.escape= function(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
}

var re = RegExp(tce.map(RegExp.escape).join('|'), "g");

var msg = "hello :/ world :):)";
var countOcurrences = (msg.match(re) || "").length; // 3

答案 3 :(得分:-1)

不要将正则表达式用于精确的字符串匹配。

您可以使用indexOf,使用第二个参数offset查找并计算所有匹配项。

var pos = msg.indexOf(str);
if (pos === -1) {
    // no match
}
var last_pos = pos;

pos = msg.indexOf(str, last_pos + 1);
if (pos !== -1) {
    counter += 1;
}

在循环中执行此操作,基本上是^