在大文本中查找特殊词

Find special words in big text

I MAKE : 我想在大文本中找到来自编程领域(HTML、JavaScript、后端...)的特殊词(1000+ 个单词)并将我找到的所有编程单词放入新数组

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

  1. 非常大的数组和编程字
  2. 编写一个循环,将 BIG TEXT 中的每个单词与 BIG ARRAY 中的单词(带有编程单词)进行比较

但我认为有一些解决方案可以大大简化任务。

知道如何让这个 MORE 更简单吗?

我写在服务器上JavaScript

编辑: 我知道 indexOf 等的人。谢谢,但我想找到

  1. 算法非常快
  2. 如何避免写编程字(500+)

"SOLVED :" 我找到了 underscore.js 示例:

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

您可以尝试使用正则表达式。此搜索以查看 HTMLJavaScriptBack-end 是否在字符串

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 声明中给出的任何单词在给定的字符串中,它将 return true,如果不在,则 false

在您的情况下,您可能希望单独测试每个单词或编写不同的正则表达式,允许单词与每个定义单词之间的任何字符的任意组合。

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

JavaScript RegExp reference

我想到了很多 fast string searching algorithms,尤其是 Rabin-Karp

可以在 this gist 中找到实现,您还可以在其中比较不同函数之间的 运行 次:

function simpleSearch(text, str) {
   ...

function searchRabinKarp(text, str) {
   ...

标准方法(regexindexOf)的性能已经在 this post.

中进行了比较

嗯..实际上我想推荐你的是对你的数组使用一个名为 indexOf 的 JS 函数。 通过这种方式,您至少可以删除一个循环。如果上面的JS func的return值为-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

希望以上代码对您有所帮助。 抱歉,如果代码看起来不像我通过我的智能 phone!

回答的那样漂亮