【问题标题】:Rails + REGEX: Extract name from email domainRails + REGEX:从电子邮件域中提取名称
【发布时间】:2015-06-29 04:56:06
【问题描述】:

我正在根据以下逻辑在 Company 表中创建新记录:

if company.nil?
  Company.create!(name: User.get_company_name(self.email)), domain: User.get_domain(self.email))
end

我想提取要放在公司表中的域名称。 IE。如果我有 nick@nike.com,我想使用正则表达式替换 'Nike' 作为公司名称。或者,对于 ryan@ryandrake.com,我希望公司名称为 'Ryandrake'

我已经有这个方法用于提取域,但还没有设法对其进行编辑以提取名称:

def self.get_domain(email_address)
  email_address.gsub(/.+@([^.]+.+)/, '\1') // Returns 'nike.com' or 'ryandrake.com'
end

任何有关修改上述方法以仅返回 'Nike''Ryandrake' 的帮助都会非常有帮助!

【问题讨论】:

    标签: ruby-on-rails regex ruby-on-rails-4 gsub


    【解决方案1】:

    您只需 email_address[/(?<=@)[^.]+/] 即可获得所需的名称。

    def self.get_domain(email_address)
      email_address[/(?<=@)[^.]+/]
    end
    

    示例:

    "pavan@gmail.com"[/(?<=@)[^.]+/]
     => "gmail"
    

    DEMO

    【讨论】:

    • 谢谢帕万!这是我所追求的最简单、最优雅的解决方案。
    【解决方案2】:

    使用此正则表达式捕获@. 之间的字母:(?&lt;=@)(.*)(?=\.) 然后用整个字符串替换。

    DEMO

    gsub(/.+(?&lt;=@)(.*)(?=\.).+/, '\1')

    DEMO

    【讨论】:

      【解决方案3】:

      将捕获组仅用于捕获出现在@ 旁边的单词字符。捕获组内的.+ 也有助于捕获.com 部分。

      email_address.gsub(/.+@([^.]+).+/, '\1')
      

      email_address.gsub(/.+@([^.]+)\..+/, '\1')
      

      【讨论】:

        猜你喜欢
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-10
        • 2015-09-10
        • 2012-10-10
        • 2013-09-29
        相关资源
        最近更新 更多