解释Ruby方法gsub/scan



我试图得到这行代码中发生的事情的解释:

info["phone"] = info["phone"].gsub!(/D/,"").scan(/1?(d{3})(d{3})(d{4})/).join('.')

如果给出了电话号码,如1-999-999-9999,(999)999-9999,或任何组合

String#gsub用于将特定文本替换为另一个字符串。例如,"hello world".gsub(/hello/, "goodbye")会得到"goodbye world"。非bang变体gsub不修改字符串本身;而bang变量gsub!则:

test = "hello world"
test.gsub(/h[ae]ll[ou]/, "goodbye") # => "goodbye world"
test # => "hello world"
test.gsub!(/h[ae]ll[ou]/, "goodbye") # => "goodbye world"
test # => "goodbye world"

String#scan"扫描"字符串以寻找特定的模式,并返回一个出现的数组。这对于从字符串中提取某些内容很有用:

tweet = "@github @you hello, world!"
tweet.scan(/@[w]+/) # => ["@github", "@you"]

但是,如果在扫描中包含组,则返回组匹配数组的数组:

tweet.scan(/@([w]+)/) # => [["github", "you"]]

因此,.gsub!(/D/, "")所做的是从字符串中删除所有非数字字符,并修改字符串(最后一位现在并不重要)。.scan从输入中查找电话号码(电话号码是可选的1,后面跟着一组三位数,后面跟着一组三位数,后面跟着一组四位数)。由于它从输入中删除了所有非数字,因此它将尝试从输入中的前10或11个数字中创建一个电话号码,并且对于其后的每10或11个数字。

但是,join将这些数字集合连接成一个字符串999.999.9999。但如果输入中有多个电话号码,它最终也会用句号将这些电话号码连接起来。

希望对你有帮助。

info["phone"] = info["phone"].stuff -替换原来的数组/哈希/其他

.gsub!(/D/,"") -删除所有非数字,如括号或连字符。(注意,你不需要!

.scan(/1?(d{3})(d{3})(d{4})/) -开始时国家代码为1。那么有三位数字在第一个匹配组中。然后第二个匹配组中有三位,最后一个匹配组中有四位。组被放入数组。

.join('.') -将数组的所有元素组合成一个字符串,中间有点。

所以…

'1+(555)123-4567'会变成'555.123.4567'

相关内容

  • 没有找到相关文章

最新更新