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

求Sed正则表达式:将JS中点表示法转数组表示法(最多4层)

解决方案:用Sed转换JavaScript点表示法为数组表示法

全局转换所有合法属性访问(支持最多4层及以上)

如果需要将所有符合JavaScript语法的点式属性访问转换为数组表示法(覆盖1-4层深度场景),可以使用以下sed命令:

sed -E 's/([a-zA-Z0-9_$)\]])\.([a-zA-Z_$][a-zA-Z0-9_$]*)/\1['\''\2'\'']/g' input.js > output.js

命令说明

  • -E:启用扩展正则表达式,简化语法书写
  • 正则匹配逻辑:
    • ([a-zA-Z0-9_$)\]]):匹配属性访问的前置合法字符,包括标识符结尾(字母、数字、下划线、$)、函数调用闭合括号)、数组访问闭合括号]
    • \.:匹配点号(需转义,避免正则中.的通配符特性)
    • ([a-zA-Z_$][a-zA-Z0-9_$]*):匹配合法JavaScript属性名(必须以字母、下划线或$开头,后续可追加数字等字符)
  • 替换逻辑:
    • \1:保留前置匹配的原对象/表达式内容
    • ['\''\2'\'']:将匹配到的属性名包裹为数组访问格式,'\''是bash环境下单引号字符串内转义单引号的标准写法

效果示例

  • 单层属性:this.myobject.test → this.myobject['test']
  • 两层属性:this.myobject.swift.cc → this.myobject['swift']['cc']
  • 四层属性:obj.a.b.c.d → obj['a']['b']['c']['d']
  • 特殊场景:func().prop → func()['prop']、arr[0].val → arr[0]['val']

仅转换特定对象的属性

如果只需针对某个特定对象(比如myobject)的属性进行转换,直接使用上述全局命令即可——它会自动处理该对象后续的多层属性,例如this.myobject.a.b.c会被转换为this.myobject['a']['b']['c']。

注意事项

  • 命令会自动跳过数字中的点(如3.14)和字符串内的点(如"hello.world"),避免误替换
  • 建议先在测试文件验证效果,再应用到正式代码
  • 若需严格限制最多转换4层属性,可执行4次非全局替换(去掉g参数),但通常全局替换已满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:36:08