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

JavaScript基于字符串模板提取动态关键字的实现方法问询

实现方案

JavaScript 目前没有内置的专门用于反向匹配模板字符串提取参数的标准API,你可以通过正则转换的方式自行实现,逻辑如下:

  • 先提取模板中的所有占位符名称,同时将模板转换为可匹配的正则表达式,把{{xxx}}占位符替换为对应的正则捕获组
  • 用生成的正则匹配输入字符串,将捕获到的内容和占位符名称一一对应,返回结果对象

代码示例

function parseTemplate(template, input) {
  // 收集所有占位符名称
  const placeholders = []
  // 先转义模板中的正则特殊字符
  const escapedTemplate = template.replace(/[.*+?^${}()|[\]\\]/g, char => `\\${char}`)
  // 替换所有{{占位符}}为正则捕获组,同时记录占位符名
  const regexStr = escapedTemplate.replace(/\\{\\{(\w+)\\}\\}/g, (_, placeholderName) => {
    placeholders.push(placeholderName)
    // 若需支持参数值带空格,可将下方的[^\\s]+改为.+?
    return '([^\\s]+)'
  })
  const matchRes = input.match(new RegExp(`^${regexStr}$`))
  if (!matchRes) return null
  // 拼接为键值对结果
  return placeholders.reduce((result, name, idx) => {
    result[name] = matchRes[idx + 1]
    return result
  }, {})
}

// 测试
const myTemplate = 'I am {{name}} from {{city}}'
const inputStr = 'I am Alex from Paris'
console.log(parseTemplate(myTemplate, inputStr)) // { name: "Alex", city: "Paris" }

注意事项

如果你的参数值可能包含空格,只需把捕获规则里的[^\\s]+替换为.+?即可,需要确保模板的固定文本边界足够清晰,避免出现匹配混乱的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:57:01