【问题标题】:Javascript multiple instances of word in string [duplicate]Javascript字符串中单词的多个实例[重复]
【发布时间】:2017-08-10 15:41:43
【问题描述】:

我希望我的代码打印出 name 的所有实例。

var text = "Eric bla bla bla bla bla Eric bla bla bla Eric";
var myName = "Eric";
var hits = [];

for(var i = 0 ; i<text.length;i++){
    if(text.indexOf(myName) >= 0){
                hits.push(myName);
        }
}

console.log(hits);

在这里,它在数组“hits”中打印出 20 个“Eric”实例。

如何只打印 3 个实例(正好 3 个在字符串 'text' 中)。

【问题讨论】:

  • 您在此处使用的循环针对字符串中的每个字符执行。
  • (text.match(new RegExp("\\b" + myName + "\\b", "g")) || []).length

标签: javascript string indexof


【解决方案1】:

您应该在计算之前拆分已经拆分。不是每个字符。

var arr = text.split(" ");
for(var i = 0 ; i<arr.length;i++){
    if(arr[i]==myName){
                hits.push(myName);
        }
}

【讨论】:

  • 这行得通,谢谢!
【解决方案2】:

保存您上次获得的索引,并在后续调用indexOf 时使用它来跳过该事件。您也不想为每个字符循环,索引indexOf 扫描;这是do-while 有用的地方:

var text = "Eric bla bla bla bla bla Eric bla bla bla Eric";
var myName = "Eric";
var hits = [];
var index = -1;
do {
  index = text.indexOf(myName, index + 1);
  if (index >= 0) {
    hits.push(myName);
  }
} while (index >= 0);

console.log(hits);

【讨论】:

  • 这行得通,但对我来说有点难以理解(仍然是初学者),用 array.split 回答对我来说更容易。谢谢!
  • @joki00:很公平。请注意,如果 Eric 后面跟着标点符号,使用 split 的答案将失败(“你知道,Eric,你是个好人。”)。即使在其他东西(“Hi,Erica”)中间,上面也会识别“Eric”,这可能是上面的缺点(或不是,取决于你想要什么)。
【解决方案3】:

您可以使用while 循环,并将位置作为检查值。然后将该位置作为下一次查找的起始值。

var text = "Eric bla bla bla bla bla Eric bla bla bla Eric",
    myName = "Eric",
    hits = [],
    p = text.indexOf(myName);

while (p !== -1) {
    hits.push(myName);
    p = text.indexOf(myName, p + 1);
}

console.log(hits);

【讨论】:

    【解决方案4】:

    使用String.prototype.match() 函数查找搜索名称的所有实例:

    var text = "Eric bla bla bla bla bla Eric bla bla bla Eric",
        myName = "Eric",
        hits = text.match(new RegExp("\\b" + myName +"\\b", "g"));
    
    console.log(hits);

    \b - 指向单词边界

    【讨论】:

      【解决方案5】:

      下面的代码可能会对你有所帮助。

      var text = "Eric bla bla bla bla bla Eric bla bla bla Eric";
      var myName = "Eric";
      var hits = [];
      
      var lastIndex = text.indexOf(myName);
      while (lastIndex !== -1) {
          hits.push(myName);
          lastIndex = text.indexOf(myName, lastIndex + myName.length);
      }
      console.log(hits);
      

      【讨论】:

        【解决方案6】:

        首先它打印 Eric,因为字符串中存在许多字符,包括空格,因此,对于 print 3 个元素,静态设置限制为 3

         for(var i = 0 ; i<3;i++)
        

        或者根据你的问题,总共有 45 个字符,所以你可以像这样使用

        for(var i = 0 ; i<text.length;i++)
        

        【讨论】:

        • "或打印 3 个元素静态设置限制为 3" - 重点是计算“Eric”在输入字符串中出现的次数。所以不应该设置特别的限制,字符总数是无关紧要的。
        猜你喜欢
        • 1970-01-01
        • 2018-08-05
        • 2020-10-03
        • 2021-12-30
        • 1970-01-01
        • 2021-02-18
        • 1970-01-01
        • 2020-02-22
        • 2015-12-27
        相关资源
        最近更新 更多