1
function occurrence(string,substring) {
    var counter = 0;
    var sub = substring.toLowerCase();
    var str = string.toLowerCase(); 
    var array = []
    var ans;

    for (var i = 0; i < str.length; i++) {
        if (str.indexOf(sub) != -1) {
            array[counter] = str.indexOf(sub);
            counter += 1;
            ans = array.length
            alert(array); //tester to see inside array
        } else {
            ans = 0;
        }
    }
    return ans
}

alert(occurrence("Party arty art","art")) //tester to see function in action

上記のテスターでは、3 が出力されます。しかし、私のコードでは、文字列の長さが出力されます。「アート」が文字列に表示される場所のインデックスを配列に格納して、配列を出力して出現回数を示すことができるようにしようとしています。ただし、ループ内で配列に警告すると、「1、1、1、1、1、1、1、1、1、1、1、1、1、1」と出力されます。

注: 組み込み関数をできるだけ少なくして、このコードを記述しようとしています。私はJavaScriptが初めてなので、いくつかのガイダンスをいただければ幸いです。

また、私は .match() なしでこれを書こうとしています

4

3 に答える 3

1

このようなものはどうですか?

function occurrence(string, substring) {
    var counter = 0;
    var sub = substring.toLowerCase();
    var str = string.toLowerCase(); 
    var array = [];
    var index = -1;

    do {
        index = str.indexOf(sub, index + 1);
        if (index != -1) {
            array[counter++] = index;
            i = index;
        }
    } while (index != -1);

    return counter; // or return array; if you want the indexes
}
于 2013-11-06T21:07:43.657 に答える
0

正規表現の一致を考えたことはありますか? この場合はそれが一番いいのかもしれません。

どうぞ:(PS、変数に名前を付けるときは、「文字列」や「整数」などの組み込みの名前を使用しないことをお勧めします)

文字列から正規表現文字をエスケープする関数を作成する必要があります:...その関数を使用します。

function occurrence(str, substr) {
  var escaped = escapeFn(substr)
  var regex = new RegExp(escaped,"g")

  return str.match(regex).length

}

編集:申し訳ありませんが、マッチを使用したくないと言った下部を見逃していたに違いありません。

于 2013-11-06T21:06:49.757 に答える
0

使用したいかもしれませんmatch()

「ain」の文字列を検索します。

var str = "The rain in SPAIN stays mainly in the plain"; 
var res = str.match(/ain/g);

res の結果は、次の値を持つ配列になります。

アイン、アイン、アイン

したがって、あなたの例では、次のようなものがうまくいくかもしれません:

function occurrence(string, substring) {
    var counter = 0;
    var sub = new RegExp(escapeRegexStringCharactersFunction(substring.toLowerCase()),"g");
    var str = string.toLowerCase(); 
    var array = []

    array = str.match(sub);
    counter = array.length;

    return counter;
}

さらに簡単:

function occurrence(string, substring) { 
    var array = []
    var sub = new RegExp(escapeRegexStringCharactersFunction(substring),"gi");
    array = string.match(sub);
    return array.length;
}
于 2013-11-06T21:07:19.287 に答える