【问题标题】:Searching a text from a paragraph - Javascript?从段落中搜索文本 - Javascript?
【发布时间】:2015-02-03 07:07:49
【问题描述】:

我写了下面的代码来从一段中搜索我的名字,

 /*jshint multistr:true */

text = "Blah blah blah blah blah blah Elic \
blah blah blah Eric blah blah Eric blah blah \
blah blah blah blah blah Eric";

var myName = "Eric";
var hits = [];
var l=0;
var count=0;


// Look for "E" in the text
for(var i = 0; i < text.length; i++) {
    if (text[i] === "E") {

        for(var j = i; j < (myName.length + i); j++) {
           for(var k =1; k < 4; k++) {
            if(text[i+k] === myName[k]){

            hits.push(text[j]); 
            }
                else {
                    break;
                }

                }           
            }

        }
    }



if (hits.length === 0) {
    console.log("Your name wasn't found!");
} else {
    console.log(hits);
}

但是输出就像 [ 'E', 'E', 'E', 'r', 'r', 'r', 'i', 'i', 'i', 'c', 'c', 'c', 'E', 'E', 'E', 'r', 'r', 'r', 'i', 'i', 'i', 'c', 'c', 'c', 'E', 'E', 'E', 'r', 'r', 'r', 'i', 'i', 'i', 'c', 'c', 'c' ]

我确定这是因为第三个 for 循环,请提出一些建议来微调此代码,以便输出如下所示,

[ 'E', 'r', 'i', 'c', 'E', 'r', 'i', 'c', 'E', 'r', 'i', 'c', 'E', 'r', 'i', 'c' ]

提前致谢。

【问题讨论】:

    标签: javascript arrays string search


    【解决方案1】:

    1

    var res = text.match(new RegExp(myName, 'g')).join('').split('');
    

    2

    var text = "Blah blah blah blah blah blah Elic \
    blah blah blah Eric blah blah Eric blah blah \
    blah blah blah blah blah Eric";
    
    var myName = "Eric";
    var hits   = [];
    var l      = 0;
    var count  = 0;
    var foundName = '';  
    
    for (var i = 0; i < text.length; i++) {
      foundName = '';
    
      if (text[i] === "E") {
        for (var j = 0; j < myName.length; j++) {
          foundName += text[i + j];                
        }
    
        if (foundName === myName) {
          for (var k = 0; k < myName.length; k++) {
            hits.push(foundName[k]);                
          }
        }
      }
    }
    
    console.log(hits);

    【讨论】:

      【解决方案2】:

      您不需要这两个内部 for 循环。当您break 时发生了什么,您正在跳出最里面的 for 循环,但仍在运行第二个 for 循环。

      试试这个,而不是两个内部for循环:(替换涉及j的for循环)

      for (var k = 0; k < 4; k++) {
          if (text[i + k] === myName[k]) {
              hits.push(text[i + k]); 
          } else {
              break;
          }
      }      
      

      【讨论】:

      • 这里,它不打印'E',
      • [ 'r', 'i', 'c', 'r', 'i', 'c', 'r', 'i', 'c' ] 是输出跨度>
      • @Vizkos 怎么会这样?在 javascript 中索引越界将返回 undefined,它不等于 myName 中的任何可能字符。
      • 哦,没关系,我明白你在说什么。我不确定 OP 是否意味着包含他名字的部分翻译(比如额外的“E”),所以我只是给出了我认为与他提供的代码差别最小的解决方案。
      【解决方案3】:

      不确定您想对结果做什么,但假设您只想测试名称是否在字符串中,您使用 .indexOf() 方法,所以:

      var n = text.indexOf("Eric");
      

      然后n 的结果将显示第一个字符的索引位置,如果找不到匹配的单词则返回-1

      然后你把它添加到一个简单的测试中,比如:

      if(text.indexOf("Eric") <0){
           \\doStuff
      }
      

      【讨论】:

        【解决方案4】:

        你可以尝试使用javascript .indexOf()函数。

        text = "Blah blah blah blah blah blah Elic \
        blah blah blah Eric blah blah Eric blah blah \
        blah blah blah blah blah Eric";
        
        if(text.indexOf('Eric') < 0 ){
            console.log("Your name wasn't found!");
        }
        

        【讨论】:

        • 你错过了重点,他可能正在尝试找到一个名字,但问题所问的 o/p 不是你所做的:P
        【解决方案5】:

        请试试这个..

             text = "Blah blah blah blah blah blah Elic lah blah blah Eric blah blah Eric blah blah blah blah blah blah blah Eric";
        
            var charFound=0;
            var myName = ['E' , 'r', 'i' ,'c'];
            var hits = [];
            var l=0;
            for(var i = 0; i < text.length; i++) 
            {
                if(text[i] === myName[charFound])
                {   
                  charFound++;
                }
                else
                {
                  continue;
                  charFound=0;
                }
                if(charFound == 4)
                {
                  for(var j = 0; j < 4;  j++)
                  {
                     hits.push(text[i-j]); 
                    }
                    charFound = 0;
                }
           }
           // Rearranging the hits counter to match the requirement
           for(var k = 0; k <hits.length/2; k++ )
           {
                var temp="";
                temp = hits[k];
                hits[k]= hits[hits.length-k-1];
                hits[hits.length-k-1] = temp;
           }
          alert(hits);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-13
          • 2021-04-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多