用Javascript中的单词数组拆分字符串

用Javascript中的单词数组拆分字符串,javascript,string,Javascript,String,我正在提取一些文本,并希望将其拆分为一个数组。我的目标是能够将其拆分为由搜索引擎忽略的stopwords分隔的短语,如“a”、“the”等,这样我就可以在API中搜索每个短语。例如:“奶牛的帽子真的很有趣”将导致arr[0]=奶牛的帽子和arr[1]=有趣。我已经有了一个停止字数组,但我真的想不出如何按其中的每一个/任何一个字进行实际拆分,而不编写一个非常慢的函数来循环遍历每一个字。快速而肮脏的方法是用一些独特的字符(例如&&&)替换停止字字符串,然后根据该独特的字符进行拆分 比如说 var t

我正在提取一些文本,并希望将其拆分为一个数组。我的目标是能够将其拆分为由搜索引擎忽略的stopwords分隔的短语,如“a”、“the”等,这样我就可以在API中搜索每个短语。例如:“奶牛的帽子真的很有趣”将导致arr[0]=奶牛的帽子和arr[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);

快速而肮脏的方法是用一些唯一的字符(例如&&&&)替换停止字字符串,然后根据该唯一字符进行拆分

比如说

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);
使用split。它需要一个正则表达式。以下是一个简单的例子:

search_string.split(/\b(?:a|the|was|\s)+\b/i);
如果已经有了停止字数组,可以使用join来构建正则表达式。请尝试以下操作:

regex = new RegExp("\\b(?:" + stop_words.join('|') + "|\\s)+\\b", "i");
一个有效的例子。注意:替换这些值可能比拆分它们更好,因为此结果中有空数组元素。

使用拆分。它需要一个正则表达式。以下是一个简单的例子:

search_string.split(/\b(?:a|the|was|\s)+\b/i);
如果已经有了停止字数组,可以使用join来构建正则表达式。请尝试以下操作:

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

一个有效的例子。注意:替换这些值可能比拆分这些值更好,因为此结果中有空数组元素。

这对关键字不区分大小写,并由单词边界包围

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

  var arr = str.split(/\ba\b|\bthe\b|\bwas\b/i);
数组中可能会出现一些空项。要压缩它,可以执行以下操作:

  var len = arr.length;

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

这对关键字不区分大小写,并由单词边界包围

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

  var arr = str.split(/\ba\b|\bthe\b|\bwas\b/i);
数组中可能会出现一些空项。要压缩它,可以执行以下操作:

  var len = arr.length;

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

这正是我所想的,但我想看看我是否能找到一个更快的方法。这正是我所想的,但我想看看我是否能找到一个更快的方法。学习单个字符。我已经更新了我的答案,以包含单词边界。@patrick,现在回想起来,这可能不是最好的方法,但确实有效。但是,它确实提供了几个空元素。我更新了我的答案以包含一个示例链接。在我发表评论时,它仍然不起作用,即使在添加了\b之后。现在您已经将其更改为添加不区分大小写,它更接近了,但是在您的第一个示例中仍然捕获了,尽管您已经在测试页面中更改了它。此外,由于您在正则表达式中添加了\s,现在您也删除了空格,这不会给OP提供所需的结果。@patrick,我确实在事后进行了更新。但是OP已经标记了它的答案,所以我留下了我的矛盾。工作示例供所有人使用。学习单个字符。我已经更新了我的答案,以包含单词边界。@patrick,现在回想起来,这可能不是最好的方法,但确实有效。但是,它确实提供了几个空元素。我更新了我的答案以包含一个示例链接。在我发表评论时,它仍然不起作用,即使在添加了\b之后。现在您已经将其更改为添加不区分大小写,它更接近了,但是在您的第一个示例中仍然捕获了,尽管您已经在测试页面中更改了它。此外,由于您在正则表达式中添加了\s,现在您也删除了空格,这不会给OP提供所需的结果。@patrick,我确实在事后进行了更新。但是OP已经标记了它的答案,所以我留下了我的矛盾。工作示例适用于all to fork。+1用于压缩阵列,这是使用拆分解决方案的问题。+1用于压缩阵列,这是使用拆分解决方案的问题。