String#gsub 用于将特定文本替换为另一个字符串。例如,"hello world".gsub(/hello/, "goodbye") 将导致 "goodbye world"。非爆炸变体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。但是如果输入中有多个电话号码,它最终也会用句点连接这些电话号码。
希望对您有所帮助。