1

文字列内の配列の出現回数をカウントする必要があります。次のような特殊文字に問題があります;/()

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

4 に答える 4

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]);
}

これが実際の例です

于 2013-11-06T11:05:10.457 に答える
0

配列の値を次のように変更します。

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

正規表現の使用中にエスケープする必要があります()

于 2013-11-06T10:58:57.420 に答える
-1

文字列の完全一致には正規表現を使用しないでください。

を使用できますindexOf。2 番目のパラメーター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;
}

基本的にループでそれを行います^

于 2013-11-06T10:53:41.063 に答える