Ruby或Rails中是否有优雅的方法去除特定首尾字符?
Ruby/Rails 移除字符串首尾连字符的优雅方案
你遇到的问题很典型——Ruby原生的strip方法仅用于移除首尾空白字符,不支持传入自定义字符参数,所以直接传"-"会报错:
[3] pry(main)> "-thi-ng-".strip "-" ArgumentError: wrong number of arguments (given 1, expected 0)
下面分Ruby原生和Rails框架两种场景,给出几种优雅的实现方式:
Ruby 原生实现
移除首尾各一个连字符
如果只需要移除字符串开头和结尾的单个连字符,可以用delete_prefix和delete_suffix链式调用,逻辑清晰且性能不错:
"-thi-ng-".delete_prefix('-').delete_suffix('-') # 结果: "thi-ng"
移除首尾所有连续连字符
如果字符串首尾可能有多个连续连字符(比如"--thi-ng--"),用正则表达式的锚点匹配更合适:
# 方式1:两次sub分别处理首尾 "--thi-ng--".sub(/^-+/, '').sub(/-+$/, '') # 结果: "thi-ng" # 方式2:一次gsub匹配首尾两种情况 "--thi-ng--".gsub(/^-+|-+$/, '') # 结果: "thi-ng"
Rails 框架下的实现
Rails 5.2及以上版本为String类扩展了strip_leading和strip_trailing方法,支持直接传入要移除的字符,用法非常直观:
# 移除开头所有连字符,再移除结尾所有连字符 "--thi-ng--".strip_leading('-').strip_trailing('-') # 结果: "thi-ng"
如果是Rails项目,优先用这两个方法,代码可读性更高。
内容的提问来源于stack exchange,提问作者David Cook
相关产品推荐
相关产品推荐

