javascript - 字符计数器不会打印所有字符

标签 javascript regex string

我正在制作一个字符计数器作为爱好代码。到目前为止,它正在工作,但我有一个似乎无法解决的故障。当我写下术语“a,b,c”时,它会正确地写出a:1 b:1 c:1。但是当我写“a,a,c,c”时,它只写a:2。我不确定出了什么问题。这是我的代码的 JavaScript 部分(myFunction 通过按钮激活,testinput.value 是我正在使用的文本框的值):

function myFunction() {
  var occurence = document.getElementById("testinput").value;
  var cycleOne = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
    "u", "v", "w", "x", "y", "z"
  ];
  for (i = 0; i < 26; i++) {
    var counter = new RegExp(cycleOne[i], 'g');
    document.write(occurence.match(counter).length);
  }
}

最佳答案

它只打印2,因为紧接着它就因错误而失败。

让我们考虑输入为 a,a,c,c 的情况。

在循环的第一次迭代中,您将与 a 进行匹配,然后找到两个匹配项并将其打印出来。

在第二次迭代中,您将与 b 进行匹配,但它不在字符串中。因此 occurrence.match(counter) 将返回 null 并且您正尝试从 null 获取 length 属性。这就是它抛出错误的原因

TypeError: Cannot read property 'length' of null

并停止执行。

<小时/>

要解决此问题,您需要在继续之前检查它是否不为 null,如下所示

  var result = occurence.match(new RegExp(cycleOne[i], 'g'));
  if (result !== null) {
    console.log(result.length);    
  }

关于javascript - 字符计数器不会打印所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34857202/

相关文章:

javascript - 努力使用正则表达式来匹配一个字符中的两个,而不是三个

c++ - 为什么有限递归行为会导致崩溃? (free():无效的指针)

c# - 从 C# 中的一行中删除子字符串 "dynamically"

javascript - 有没有办法用 jQuery 自动更改哈希 url?

javascript - Angular ng-repeat 中的 Json 字符串不起作用

javascript - 获取文本框值并放入 HREF

javascript - 正则表达式替换里面的一个字符

Java 正则表达式行为

python - Python 中的字符串格式 : can I use %s for all types?

javascript - 正则表达式以任何顺序匹配至少 7 位数字和任意数量的特殊字符的模式