@message_to = 'bob@google.com'
@cleaned = @message_to.match(/^(.*)+@/)
@cleaned正在返回bob @,我希望它只返回bob。我是否正确使用红宝石进行正则表达式?
由于
答案 0 :(得分:5)
不需要太多正则表达
>> @message_to = "bob@google.com"
=> "bob@google.com"
>> @message_to.split("@",2)
=> ["bob", "google.com"]
>> @message_to.split("@",2)[0] if @message_to["@"]
=> "bob"
>>
答案 1 :(得分:2)
你想要这个:
@cleaned = @message_to.match(/^(.*)+@/)[1]
match
返回MatchData
个对象,其字符串版本为整个匹配项,当您处理MatchData
as an array时,从索引1开始,捕获的组可用
我可能会选择更像这样的东西:
@cleaned = @message_to.match(/^([^@]+)@/)[1]
答案 2 :(得分:1)
答案 3 :(得分:1)
有一个较短的解决方案:
@cleaned = @message_to[/[^@]+/]
答案 4 :(得分:0)
最简单我在IRB控制台中工作的RegEx是:
@message_to = 'bob@google.com'
@cleaned = @message_to.match(/(.+)@/)[1]
同样可以从link开始尝试:
@cleaned = @message_to.match(/^(?<local_part>[\w\W]*?)@/)[:local_part]
答案 5 :(得分:0)
调整代码最明显的方法是使用前向肯定断言。而不是说“匹配bob@
”,而是说“匹配bob
,后跟@
”
@message_to = 'bob@google.com'
@cleaned = @message_to.match(/^(.*)+(?=@)/)
关于何时使用和不使用正则表达式的另一点:是的,在这种情况下使用正则表达式有点无意义。但是当你使用正则表达式时,添加验证也更容易:
@cleaned = @message_to.match(/^(([-a-zA-Z0-9!#$%&'*+\/=?^_`{|}~]+.)*[-a-zA-Z0-9!#$%&'*+\/=?^_`{|}~]+(?=@)/)
(是的,所有这些都在电子邮件地址中有效)