我做:我想在大文本(1000+单词)中找到编程域(HTML,JavaScript,后端...)中的特殊单词,并放入我找到的所有编程单词到新阵列
问题:在我看来,只有一种方法可以做到这一点。
但我认为有一些解决方案可以大大简化任务。
知道如何让这个 MORE 更容易吗?
我在服务器JavaScript上写道
编辑:我知道indexOf等等的人谢谢你,但我想找到
“已解决:”我找到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
答案 0 :(得分:0)
我想到了一些fast string searching algorithms,特别是 Rabin-Karp 。
可以在this gist中找到一个实现,您可以在其中比较不同函数之间的运行时间:
function simpleSearch(text, str) {
...
function searchRabinKarp(text, str) {
...
已经比较了标准方法(regex
和indexOf
)的表现
答案 1 :(得分:0)
嗯..实际上我想建议你使用一个名为indexOf的JS函数来对付你的数组。 通过这种方式,您至少可以删除一个循环。如果上述JS函数的返回值为-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
我希望上面的代码可以帮到你。 很抱歉,如果通过我的智能手机回答代码看起来不太好!
答案 2 :(得分:-3)
您可以尝试使用正则表达式。这一次搜索以查看字符串中是否有HTML
,JavaScript
或Back-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));
如果true
声明中给出的任何字词都在给定的字符串中,它将返回new
,如果不是,则返回false
。
在您的情况下,您可能希望单独测试每个单词,或者编写一个不同的正则表达式,允许单词的任意组合与每个定义的单词之间的任何字符。
这只会告诉您这个词是否在那里,而不是它在哪里或任何其他信息。