You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rails中从类名字符串动态提取指定子串的方法

动态提取类名中的通知类型部分

方案:使用正则表达式匹配

不管前缀的命名空间是::Pos::、Pos::还是其他任意形式,只要类名后缀是Notice,都可以用正则精准提取中间的类型部分:

class_name = '::Pos::EmailNotice' # 可替换为任意目标字符串
type = class_name.match(/(\w+)Notice$/)[1]
# 输出: "Email"

# 对所有示例输入都有效:
# 'Pos::EmailNotice' → "Email"
# '::Pos::CallNotice' → "Call"
# 'Pos::CallNotice' → "Call"

为什么这个方案更动态?

  • 不依赖固定的命名空间前缀(比如Pos::),不管前缀是单层、多层还是带前置::,都能正常提取
  • 只要新增的通知类型遵循XXXNotice的命名规则,无需修改代码就能自动适配
  • 相比slice/delete_prefix这类硬编码前缀的方法,扩展性更强

容错处理(可选)

如果担心输入不符合格式导致报错,可以加个判断:

if match = class_name.match(/(\w+)Notice$/)
  type = match[1]
else
  type = 'Unknown' # 或其他自定义默认值
end

内容的提问来源于stack exchange,提问作者Donslaught

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:35:53