2010-11-12 24 views
1

我正在读取一些文本,并希望将它分割成一个数组。我的目标是能够将它分成由停用词(被搜索引擎忽略的词,如'a'''等)分隔的短语,以便我可以在我的API中搜索每个单独的短语。因此,例如:'The cow's hat was really funny'将导致arr[0] = cow's hatarr[1] = funny。我已经有一组停用词了,但是我无法真正想到如何实际上通过其中的每个/任何单词进行实际分割,而无需编写一个非常慢的函数来遍历每个单词。用Javascript中的单词分割字符串

回答

2

使用split()。它需要一个正则表达式。下面是一个简单的例子:

search_string.split(/\b(?:a|the|was|\s)+\b/i); 

如果你已经拥有的停止字阵列,可以使用join()建立正则表达式。请尝试以下操作:

regex = new RegExp("\\b(?:" + stop_words.join('|') + "|\\s)+\\b", "i"); 

工作示例http://jsfiddle.net/NEnR8/注意:它可能是最好的替换这些值比分裂它们,因为有数组元素从这个结果。

+0

这很完美,不知道'split()'带了一个正则表达式,谢谢。 – pettazz 2010-11-12 20:15:37

+1

是单个字符的助手。我已经更新了我的答案以包含单词边界。 – 2010-11-12 20:21:13

+0

杰森 - 你的答案不起作用。 – user113716 2010-11-12 20:26:23

1

快速和肮脏的方式将取代“停止词”具有一些独特的字符(例如& & &)字符串,然后根据这一独特性格分裂。

例如。

var the_text = "..............", 
    stop_words = ['foo', 'bar', 'etc'], 
    unique_str = '&&&'; 

for (var i = 0; i < stop_words.length; i += 1) { 
    the_text.replace(stop_words[i], unique_str); 
} 

the_text.split(unique_str); 
+0

这正是我的想法,但我想看看我能否找到更快的方法。 – pettazz 2010-11-12 20:19:12

+0

正是我所需要的!谢谢! – 11684 2012-05-04 11:35:29

2

这对您的关键字不区分大小写.split(),由字边界包围。

var str = "The cow's hat was really funny"; 

    var arr = str.split(/\ba\b|\bthe\b|\bwas\b/i); 

您最终可能会在Array中出现一些空项目。为了压缩它,你可以这样做:

var len = arr.length; 

    while(len--) { 
    if(!arr[len]) 
     arr.splice(len, 1); 
    } 
+0

+1用于压缩数组,这是使用'split()'解决方案的问题。 – 2010-11-12 20:42:14