0
var _myTxt;
var _myWord;
var _count;
var _count2;

function _findWord() {
    _myTxt = document.getElementById('myTextBox').value;
    _myWord = document.getElementById('myTxtField').value;
    var re = new RegExp(_myWord, "gi");
    _myTxt = _myTxt.replace(re, "<span style='font-weight: bold'>$&</span>");
    _count = _myTxt.match(re);
    _count2 = _count.length;
    alert(_count.length); // alert returns nothing when there is 0 match ?!
    if (_count < 1) {
        document.getElementById("_idProcessedTxt").innerHTML = "There is no matching occurence for searched word";
    } else {
        document.getElementById("_idProcessedTxt").innerHTML = _myTxt;
        document.getElementById("_idProcessedTxt2").innerHTML = ("Your word was matched : " + _count2 + " times.");
    }
}

こんにちは、上記のコードは次のようになっています。

  1. 文字列を別の文字列 (実際にはスパンタグと同じ文字列) に置き換え、
  2. 出現回数/置換が見つかった回数を数えます。

少なくとも 1 つ以上の一致があるすべてのケースでうまく機能します。どういうわけか、入力した単語がまったく一致しない場合は機能しません。これはコードを完全に壊しているように見えます.一致が0の場合でもアラートは何も返しません.

理由はありますか?

4

1 に答える 1

2

.match()一致するものが見つからない場合は、 を返しますnull。したがって、「_count」がnullの場合、次の行:

_count2 = _count.length;

エラーが発生します (開発者コンソールに表示されます!)。

が1 つ以上の一致を見つけると、配列を返します.match() したがって、関数内のこの後続のコード:

    if (_count < 1) {

配列を数値と比較しているため、意味がありません。

于 2013-08-14T16:37:31.003 に答える