首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript计数数组在字符串中的出现

Javascript计数数组在字符串中的出现
EN

Stack Overflow用户
提问于 2013-11-06 10:50:48
回答 4查看 906关注 0票数 1

我需要在字符串中计数数组的出现情况。我对像;/()这样的特殊角色有问题

代码语言: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;
}

我认为有了正则表达式,它可能会变得更容易。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-06 11:02:54

实际上,您根本不需要任何循环。只需使用替代项(|)构造一个大型regexp,并将字符串与其匹配:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2013-11-06 11:05:10

忘记使用regex,只需使用一个简单的indexOf来检查发生的次数。这一职能将帮助你:

代码语言:javascript
复制
function countMatches(str, find) {
    var count = 0;
    var index = str.indexOf(find);
    while (index != -1) {
        count++;
        index = str.indexOf(find, index + 1);
    }
    return count;
}

你可以这样用:

代码语言:javascript
复制
var msg = "hello world :)";
var tce = [":)", ":(", ":/"];
var countOcurrences = 0;
for (var i = 0; i < tce.length; i++) {
    countOcurrences += countMatches(msg, tce[i]);
}

下面是一个有用的例子

票数 2
EN

Stack Overflow用户

发布于 2013-11-06 10:58:57

将数组值更改为:

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

在使用regex时,您需要转义()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19810106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档