1

我将获得以下任何格式的 url:

- ?M=Foo bar
- ?M=Foo%20bar
- ?M=%20Foo_bar
- ?M=Foo bar?
- ?M=F00_bar
- ?M=Foo#1bar_do

或单词、特殊字符和数字的任意组合。

我可以简单地使用

 params[:M]

问题 :

但是,现在我想转换输出并将其存储到变量 'm' 中,例如:

 m = FooBar

1) 在这里,忽略所有其他字符((下划线)_、#1、空格、?等)和数字,只使用字母。

2)结合结果形成类似的东西:

FooBar
FooBarDo

我不擅长正则表达式,所以我将非常感谢任何帮助解决这个问题

4

3 回答 3

2

这是一种使用方法scan

m = "Foo%20bar"
m.scan(/[A-Za-z]/).join #=> Foobar

m = "Foo#1bar_do"
m.scan(/[A-Za-z]/).join #=> Foobardo

m = "F00_bar"
m.scan(/[A-Za-z]/).join #=> Fbar

因此,在您的情况下,您将使用类似于以下内容的内容:

params[:M].scan(/[A-Za-z]/).join
于 2013-10-15T09:33:29.590 回答
1

检查这个,

m.scan(/[a-z]+/i).join

>> m = "Foo bar"
=> "Foo bar"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "Foo%20bar"
=> "Foo%20bar"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "%20Foo_bar"
=> "%20Foo_bar"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "Foo bar?"
=> "Foo bar?"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "F00_bar"
=> "F00_bar"
>> m.scan(/[a-z]+/i).join
=> "Fbar"
>> m = "Foo#1bar_do"
=> "Foo#1bar_do"
>> m.scan(/[a-z]+/i).join
=> "Foobardo"
于 2013-10-15T10:25:02.053 回答
0

如果您想了解更多关于正则表达式的信息,我强烈建议您查看http://rubular.com/ 。它允许您使用正则表达式和字符串来显示匹配项。

其他答案很好,但您也可以使用 gsub。

"Foo#1bar_do".gsub(/\p{^Alpha}/, "") #=> "Foobardo"
"Foo%20bar".gsub(/\p{^Alpha}/, "")   #=> "Foobar"
于 2013-10-17T06:37:18.007 回答