为什么在找不到匹配时计数失败?

时间:2013-08-14 16:34:52

标签: javascript

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. 用另一个字符串(实际上是带有span标签的相同字符串)和
  2. 替换字符串
  3. 计算发现/替换的次数。
  4. 适用于至少有一个或多个匹配的所有情况。出于某种原因,我不明白,当输入的单词根本不返回匹配时,它不起作用。这似乎完全打破了代码,即使在0匹配时警报也不返回。

    有什么线索?

1 个答案:

答案 0 :(得分:2)

.match()找不到匹配项时,它会返回null。因此,当“_count”为null时,下一行:

_count2 = _count.length;

会导致错误(您可以在开发者控制台中看到错误!)。

.match() 找到一个或多个匹配项时,它会返回一个数组。因此,您的函数中的后续代码:

    if (_count < 1) {

没有任何意义,因为您将数组与数字进行比较。