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

如何将获取正则匹配结果的Objective-C代码改写为AppleScript代码

AppleScriptObjC 实现正则匹配获取分组范围的正确写法

首先你需要确保脚本是 AppleScriptObjC 类型,开头必须引入 Foundation 框架,以下是完整可运行的改写代码:

-- 必要框架引入,放在脚本最开头
use framework "Foundation"
use scripting additions

-- 1. 定义原始字符串和正则表达式
-- 注意:AppleScript 字符串中反斜杠需要双写转义,示例正则设置了两个捕获组,对应你要取的index1、index2
set originalString to "hello world"
set regexPattern to "(\\w+) (\\w+)"

-- 2. 初始化正则对象
set regex to current application's NSRegularExpression's regularExpressionWithPattern:regexPattern options:0 |error|:(missing value)

-- 3. 执行匹配,不需要强转为list,返回结果是NSTextCheckingResult实例或missing value
set firstMatch to regex's firstMatchInString:originalString options:0 range:{location:0, |length|:(count originalString)}

-- 4. 匹配成功后获取对应范围
if firstMatch is not missing value then
    -- 整个匹配的范围,返回{location:xxx, |length|:xxx}格式的记录
    set matchRange to firstMatch's |range|()
    -- 第一个捕获组的范围
    set firstHalfRange to firstMatch's rangeAtIndex:1
    -- 第二个捕获组的范围
    set secondHalfRange to firstMatch's rangeAtIndex:2
    
    -- 额外补充:如果要基于这个范围截取AppleScript原生字符串,需要转换索引(NSRange从0开始,AppleScript字符串从1开始)
    set matchStart to (location of matchRange) + 1
    set matchEnd to (location of matchRange) + (|length| of matchRange)
    set matchContent to text matchStart thru matchEnd of originalString
end if

关键修正说明

  • 不需要将firstMatchInString的返回结果强转为list,它本身是NSTextCheckingResult类型的实例,直接调用它的实例方法即可
  • 你漏了正则对象的初始化步骤,不能直接用正则字符串调用匹配方法,需要先初始化NSRegularExpression实例
  • AppleScript 中调用属性、方法如果和系统关键字重名需要用竖线包裹,比如|range|()、|length|
  • 正则表达式中的转义符在AppleScript字符串里需要双写,比如\w要写成\\w,\d要写成\\d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:54:05