1

我需要在使用非单词字符的任何地方将查询拆分为单词。例如:

query = "I am a great, boy's and I like! to have: a lot-of-fun and @do$$nice&acti*vities+enjoy good ?times."

应该输出:

["I", "am", "a", "great", "", "boy", "s", "and", "I", "like", "", "to", "have", "", "a", "lot", "of", "fun", "and", "", "do", "", "nice", "acti", "vities", "enjoy", "good", "", "times"] 

这可以解决问题,但有更简单的方法吗?

query.split(/[ ,'!:\\@\\$\\&\\*+?.-]/)
4

2 回答 2

6
query.split(/\W+/)
# => ["I", "am", "a", "great", "boy", "s", "and", "I", "like", "to", "have", "a", "lot", "of", "fun", "and", "do", "nice", "acti", "vities", "enjoy", "good", "times"]

query.scan(/\w+/)
# => ["I", "am", "a", "great", "boy", "s", "and", "I", "like", "to", "have", "a", "lot", "of", "fun", "and", "do", "nice", "acti", "vities", "enjoy", "good", "times"]

这与预期的输出不同,因为它不包含空字符串。

于 2013-10-22T05:30:00.767 回答
1

我添加了这个答案,因为@sawa 没有完全重现所需的输出:

#Split using any single non-word character:
query.split(/\W/) #=> ["I", "am", "a", "great", "", "boy", "s", "and", "I", "like", "", "to", "have", "", "a", "lot", "of", "fun", "and", "", "do", "", "nice", "acti", "vities", "enjoy", "good", "", "times"]

现在,如果您不希望结果中出现空字符串,请使用sawa 的答案。

如果字符串包含多个空格,上面的结果将在结果中创建许多空字符串,因为每个额外的空格将再次匹配并创建一个新的拆分点。为了避免这种情况,我们可以添加一个 or 条件:

# Split using any number of spaces or a single non-word character:
query.split(/\s+|\W/)
于 2013-10-22T07:31:38.807 回答