3

案例一(尾随空间)

> "on behalf of all of us  ".split(/\W+/)
 => ["on", "behalf", "of", "all", "of", "us"] 

但是如果有前导空格,那么它会给出以下内容

案例2(领先空间)

> "  on behalf of all of us".split(/\W+/)
 => ["", "on", "behalf", "of", "all", "of", "us"] 

我也期待案例 2 的案例 1 的结果。

添加

> "@dhh congratulations!!".split(/\W+/)
 => ["", "dhh", "congratulations"] 

有人可以帮我理解这种行为吗?

4

3 回答 3

4

[更新]

跳过正则表达式,只需在空间上拆分!

> "@dhh congratulations!!".split
 => ["@dhh", "congratulations"] 

\W匹配任何非单词字符,包括空格。所以解析器在开始时看到一个空格,在空格之后看到一些字符;它分裂。但是,如果它最后的空格,则没有其他冗长的字符[a-zA-Z0-9]可供分割。

#strip要获得一致的行为,您应该使用方法删除空格。

案例一(尾随空间)

1.9.3p327 :007 > " on behalf of all of us ".strip.split(/\W+/) 
 => ["on", "behalf", "of", "all", "of", "us"] 

案例2(领先空间)

1.9.3p327 :008 > "on behalf of all of us ".strip.split(/\W+/) 
 => ["on", "behalf", "of", "all", "of", "us"]
于 2013-01-01T11:39:32.597 回答
1

文档

split(pattern=$;, [limit]) → anArray

[...] 如果省略了 limit 参数,则会抑制尾随的空字段。如果 limit 是一个正数,最多将返回该数量的字段(如果 limit 为 1,则整个字符串作为数组中的唯一条目返回)。如果为负数,则返回的字段数没有限制,并且不抑制尾随的空字段。

于 2013-01-01T13:14:27.107 回答
0

仅用于文档,以下对我有用

 " @dhh congratulations!!".gsub(/^\W+/,'').split /\W+/

另一个

 " @dhh congratulations!!".scan /\w+/

两者都给出了预期的结果。但是,对于简短的形式有一个警告,例如

 > " Don't be shy.".scan /\w+/
 => ["Don", "t", "be", "shy"]  

我实际上正在收集不是冠词、连词、介词等的单词。所以无论如何我都忽略了这些简短的形式,因此我使用了这个解决方案。

我正在准备推文中的词云。如果您知道任何经过验证的算法,请分享。

于 2013-01-02T06:11:04.813 回答