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

寻找将JS/TS插值字符串转换为函数调用的成熟工具

成熟工具包推荐:处理TS/JS模板字符串转本地化友好格式

你要的这种把模板字符串转换成带序号占位符的函数调用的需求,已经有不少成熟的AST-based工具可以直接用,不用自己从零实现:

  • Babel 插件体系
    这是最适配TS/JS技术栈的方案:

    • 如果你用React Intl、i18next这类本地化库,它们的官方Babel插件(比如@babel/plugin-react-intl)已经内置了类似逻辑——会自动提取模板字符串里的插值表达式,将原字符串转成带占位符的格式。你只需简单调整插件配置,就能让它生成你自定义的interpolate函数调用,而非库自带的格式化函数。

    • 要是需要完全自定义输出,你也可以写一个极简的Babel插件:遍历AST中的TemplateLiteral节点,把字符串片段拼接成带${0}、${1}的字面量,把插值表达式收集成数组,再将原节点替换成interpolate(templateStr, exprArray)的调用,同时自动添加对应的import语句。比如你给出的示例代码,用插件可以一键转成目标格式:

      原代码:

      const a = 5;
      const b = 7;
      const foo = `first value is ${a + b}, second value is ${a * b}`;
      

      转换后代码:

      import { interpolate } from "./my-support-code";
      const a = 5;
      const b = 7;
      const foo = interpolate("first value is ${0}, second value is ${1}", [a + b, a * b]);
      
  • jscodeshift
    这是专门做批量代码转换的工具,非常适合集成到你的本地化工具链中。你只需要写一个简短的转换脚本,核心逻辑就是:

    1. 遍历代码AST,识别所有TemplateLiteral节点;
    2. 拼接字符串片段,用${i}替换对应插值位置;
    3. 收集所有插值表达式组成数组;
    4. 将原模板字符串节点替换为interpolate函数调用,同时自动注入import语句。
      它支持命令行批量处理整个项目的代码,效率很高。
  • i18next-scanner
    虽然它主要用于提取翻译字符串到资源文件,但也支持解析模板字符串的插值。你可以扩展它的转换钩子,让它在提取基础语言字符串的同时,把原代码中的模板字符串替换成你需要的interpolate调用格式,一步完成字符串提取和代码转换。

这些工具都是基于抽象语法树(AST)处理的,比正则表达式可靠得多,能完美处理嵌套表达式、复杂插值等边缘情况,完全覆盖你描述的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:01:09