string#gsub链的性能影响?

nic*_*tme 4 ruby regex coding-style

一个.gsub和/或.sub方法链对Ruby中的字符串有任何性能影响吗?

例如,以下是Rails源中为图像创建alt标记的方法示例.它删除文件扩展名和摘要(如果有).

def image_alt(src)
  File.basename(src, '.*').sub(/-[[:xdigit:]]{32}\z/, '').capitalize
end
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我希望它将下划线或连字符更改为空格,所以我想gsub在最后添加一个方法:

def image_alt(src)
  File.basename(src, '.*').sub(/-[[:xdigit:]]{32}\z/, '').gsub(/(_|-)/, ' ').capitalize
end
Run Code Online (Sandbox Code Playgroud)

这会在性能或风格方面引发危险吗?

ste*_*lag 7

str.tr('-_', ' ') 
Run Code Online (Sandbox Code Playgroud)

值得考虑(doc)

  • 作为参考,请参阅下面的评论re:使用正则表达式对字符串#tr`和`string#gsub`进行基准性能测试. (2认同)
  • 关于字符串#tr的一件事就是它不能在字符串中添加字符,只能替换.因此,如果您需要增加字符串的大小,则必须使用.sub或.gsub. (2认同)