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

Xcode正则表达式查找替换:如何在首个右括号前添加圆括号

解决Xcode中枚举关联类型批量添加括号的正则问题

我将项目中的一个枚举设为关联类型,该枚举已在数千处被使用,需要给所有访问该枚举的地方添加圆括号()。尝试用Xcode查找替换功能配合正则表达式实现,但替换结果不符合预期。

代码示例

struct Model {}

enum Investment {
    case stocks(Stocks)
}

enum Stocks {
    case highRisk(model: Model? = nil)
    case lowRisk(model: Model? = nil)
    case veryHighRisk(model: Model? = nil)
}

class Test {
    func configStockUI(model: Investment, userName: String? = nil) {
    }
}

func renderUI() {
    let test = Test()
    test.configStockUI(model: .stocks(.highRisk), userName: "Deepak")
    test.configStockUI(model: .stocks(.lowRisk))
    test.configStockUI(model: .stocks(.veryHighRisk))

    // 期望输出
    test.configStockUI(model: .stocks(.highRisk()), userName: "Deepak")
    test.configStockUI(model: .stocks(.lowRisk()))
    test.configStockUI(model: .stocks(.veryHighRisk()))

    // 实际错误输出
    test.configStockUI(model: .stocks(.highRisk), userName: "Deepak"())
    test.configStockUI(model: .stocks(.lowRisk)())
    test.configStockUI(model: .stocks(.veryHighRisk)())
}

原正则问题

之前使用的正则逻辑有误:

  • 查找:.stocks\(.(.*)\)
  • 替换:.stocks\(.$1()\)
    该正则的.*会贪婪匹配到行尾的所有内容,导致把枚举case后面的其他参数(比如字符串"Deepak")也错误地加上了括号。

正确的正则方案

精准匹配指定case

如果Stocks枚举的case是固定的几个,用这个精准匹配的正则:

  • 查找正则:.stocks\(\.(highRisk|lowRisk|veryHighRisk)\)(?!\())
  • 替换内容:.stocks(.$1())

通用匹配所有case

如果Stocks有很多case,用通用版本匹配任意字母数字组成的case名:

  • 查找正则:.stocks\(\.([a-zA-Z0-9]+)\)(?!\())
  • 替换内容:.stocks(.$1())

正则说明

  • (highRisk|lowRisk|veryHighRisk):精准匹配目标枚举的所有case,避免误匹配其他内容
  • ([a-zA-Z0-9]+):通用匹配合法的枚举case名称
  • (?!\()):负向预查,确保当前位置后面没有已经存在的括号,防止重复替换

Xcode操作步骤

  1. 打开Xcode的全局查找替换(快捷键Cmd+Shift+F)
  2. 点击查找框右侧的正则表达式按钮(图标是.*)
  3. 输入上述查找正则和替换内容
  4. 先点击Find验证匹配结果,确认无误后点击Replace All

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:25:27