我需要计算字符串中数组的出现次数。我对;/()
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;
}
我认为通过正则表达式,它可能会变得更加容易。
答案 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]);
}
答案 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;
}
在循环中执行此操作,基本上是^