Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在大文本中查找特殊单词_Javascript_Node.js_Algorithm_Find - Fatal编程技术网

Javascript 在大文本中查找特殊单词

Javascript 在大文本中查找特殊单词,javascript,node.js,algorithm,find,Javascript,Node.js,Algorithm,Find,我制作:我想从编程域(HTML、JavaScript、后端…)中找到大文本中的特殊单词(1000多个单词),并将我找到的所有编程单词放入新数组中 问题:在我看来,只有一种方法可以做到这一点 用编程字编写非常大的数组 写一个循环,将大文本中的每个单词与大数组中的单词(与编程单词)进行比较 但我认为有一些解决方案可以大大简化任务 你知道如何使这个更容易吗 我在服务器JavaScript上编写 编辑:伙计们,我知道indexOf等。谢谢你们,但我想找到 非常快的算法来做 如何避免编写编程文字(500+

我制作:我想从编程域(HTML、JavaScript、后端…)中找到大文本中的特殊单词(1000多个单词),并将我找到的所有编程单词放入新数组中

问题:在我看来,只有一种方法可以做到这一点

  • 用编程字编写非常大的数组
  • 写一个循环,将大文本中的每个单词与大数组中的单词(与编程单词)进行比较
  • 但我认为有一些解决方案可以大大简化任务

    你知道如何使这个更容易吗

    我在服务器JavaScript上编写

    编辑:伙计们,我知道indexOf等。谢谢你们,但我想找到

  • 非常快的算法来做
  • 如何避免编写编程文字(500+)
  • “已解决:”我发现 例如:

    var tagsObject = {
      "Java":"JAVA",
      "J2EE":"J2EE"
    }
    
    var words = "Java is a big language ! ! "
    
      var words = content.split(/\b/); // make array
      words = _.uniq(words); // make array with uniq words
      console.log(  _.intersection(words,_.keys(tagsObject))); // Computes the list of values that are the intersection of all the arrays, return array
    //_.keys(tagsObject) - return array with keys
    

    您可以尝试使用正则表达式。这个函数搜索字符串中是否有
    HTML
    JavaScript
    后端

    var passingWords = "HTML,blah,otherWordsHere,JavaScript,Back-end";
    var failingWords = "blah, otherWordsHere, h.tml, H.TML";
    var re = new RegExp('(HTML)|(JavaScript)|(Back-end)');
    console.log(re.test(passingWords));
    console.log(re.test(failingWords));
    
    如果
    new
    声明中给出的任何单词在给定的字符串中,它将返回
    true
    ,如果不在给定的字符串中,它将返回
    false

    在您的例子中,您可能希望单独测试每个单词,或者编写一个不同的正则表达式,以允许每个定义的单词之间具有任何字符的单词的任意组合

    这只会告诉你单词是否在那里,而不是它在哪里或任何其他信息

    我想到了很多,尤其是拉宾·卡普

    在中可以找到一个实现,您还可以比较不同函数之间的运行时间:

    function simpleSearch(text, str) {
       ...
    
    function searchRabinKarp(text, str) {
       ...
    

    标准方法(
    regex
    indexOf
    )的性能已经在井中进行了比较。。实际上,我建议您对数组使用名为indexOf的JS函数。 这样,您至少可以删除一个循环。如果上述JS func的返回值为-1,则找不到特定字符

    Var sourceArray=[a,b,c,d,e];
    
    Var toBeFoundValues=[a,x,z,d];
    
    For(var i=0;i<toBeFoundValues.length;I++)
    
    If(sourceArray.indexOf(toBeFoundValues[I])!=-1)
    
    // logic here
    
    Var sourceArray=[a,b,c,d,e];
    Var toBeFoundValues=[a,x,z,d];
    
    对于(var i=0;iJavaScript有哈希表(可能称为“字典”),只需将所有编程单词放入哈希表(作为键;与它们配对的值并不重要),然后循环遍历“大文本”中的每个单词,在您的哈希表中查找。当您找到单词时,您想做什么?数一数?只需确认文本中包含它们?您的问题中缺少一些信息。您可以避免编写编程单词,或者至少让计算机帮助确定它们应该是什么,但这是一个大主题,可能需要更多时间我建议你将这个问题限制在第一部分,这仍然需要你提供一些额外的细节来准确理解你要做的事情。然后,如果这一切顺利,并且你理解了搜索部分,好的,回到发现“编程词”上来@NeilSlater我理解第一部分,但第二部分是什么?我应该提出新问题吗?@nlpkr:是的,我建议问第二个问题。你需要弄清楚你有哪些数据才能建立单词列表,并展示你研究/尝试过的内容。任何简短的代码或数据示例都可以帮助你确定你在寻找什么这是一个更好的问题。另外,如果您现在通过给出的注释和答案理解了第一部分,那么接受(勾选)对您有帮助的答案是堆栈溢出的正常做法。这是一个糟糕的答案。您可以通过展示如何使用正则表达式来改进它。@Andy编辑以包括一个示例和更多解释