首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby RegEx问题text.gsub[^\W-],'')失败

Ruby RegEx问题text.gsub[^\W-],'')失败
EN

Stack Overflow用户
提问于 2008-09-26 11:11:16
回答 5查看 8.9K关注 0票数 6

根据我在“Rails方式”中所读到的内容,我正在尝试学习Ruby中的RegEx。但是,就连这个简单的例子也让我感到困惑。我看不出是打错还是错了:

代码语言:javascript
复制
text.gsub(/\s/, "-").gsub([^\W-], '').downcase

在我看来,这将用-替换所有空格,然后字符串以非字母或数字开头,后面跟着破折号,将其替换为'‘。但是,使用irb,它首先在^上失败。

语法错误,意外的“^”,期待“]”

如果我取出^,它在W上再次失效。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-09-26 11:14:32

代码语言:javascript
复制
>> text = "I love spaces"
=> "I love spaces"
>> text.gsub(/\s/, "-").gsub(/[^\W-]/, '').downcase
=> "--"

失踪//

虽然这更有意义:-)

代码语言:javascript
复制
>> text.gsub(/\s/, "-").gsub(/([^\W-])/, '\1').downcase
=> "i-love-spaces"

这可能就是我们的意思

代码语言:javascript
复制
>> text.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase
=> "i-love-spaces"

W的意思是“不是一个词”\W意味着“一个词”

//生成regexp对象

/^\W-/..class => Regexp

票数 9
EN

Stack Overflow用户

发布于 2008-09-27 00:09:03

步骤1:把这个添加到你的书签。每当我需要查找regexes时,这是我的第一站

第2步:让我们遍历您的代码

代码语言:javascript
复制
text.gsub(/\s/, "-")

您正在调用gsub函数,并为其提供2个参数。

第一个参数是/\s/,它是ruby,用于“创建包含\s的新regexp (regexes的// are类似特殊”)。

第二个参数是字符串"-"

因此,这将用连字符替换所有空白字符。到现在为止还好。

代码语言:javascript
复制
.gsub([^\W-], '').downcase

接下来,再次调用gsub,传递给它两个参数。第一个参数是[^\W-]。因为我们没有用正斜杠引用它,ruby会真的尝试运行这段代码。[]创建一个数组,然后尝试将^\W-放入数组中,这是无效的代码,因此会中断。

将其更改为/[^\W-]/将提供一个有效的正则表达式。

查看正则表达式,[]表示“匹配这个组中的任何字符。该组包含\W (意为非单词字符)和-,因此regex应该匹配任何非单词字符或任何连字符。”

由于传递给gsub的第二件事是空字符串,它最终应该用空字符串替换所有的非单词字符和连字符(从而去掉它们)。

代码语言:javascript
复制
.downcase

它只将字符串转换为小写。

希望这会有所帮助:)

票数 3
EN

Stack Overflow用户

发布于 2008-09-26 11:13:34

你忘了刀伤了。应该是/[^\W-]/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/138785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档