我需要在字符串中计数数组的出现情况。我对像;/()这样的特殊角色有问题
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;
}我认为有了正则表达式,它可能会变得更容易。
发布于 2013-11-06 11:02:54
实际上,您根本不需要任何循环。只需使用替代项(|)构造一个大型regexp,并将字符串与其匹配:
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发布于 2013-11-06 11:05:10
忘记使用regex,只需使用一个简单的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]);
}下面是一个有用的例子
发布于 2013-11-06 10:58:57
将数组值更改为:
var tce = [":\)", ":\(", ":/" ];
在使用regex时,您需要转义(和)。
https://stackoverflow.com/questions/19810106
复制相似问题