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

Chrome扩展开发:如何替换Google Docs中*包裹的文本?

如何用Google Docs API准确替换文档中*包裹的语音识别文本?

问题背景

我正在开发一款Chrome扩展,功能是把语音转文本的内容写入Google文档。用的语音识别API会返回两种结果:一种是快速返回但准确度低的临时文本,另一种是慢一点但准确度高的最终文本。现在的逻辑是先把临时文本写入文档,之后用最终文本替换掉它。

之前的尝试和问题

一开始我把临时文本存在buffMyText缓冲区里,用replaceAllText请求替换,但偶尔会出现缓冲区内容和文档里实际写入的内容对不上(比如有随机无效内容),导致替换失败。代码是这样的:

const requests = [
  {
    replaceAllText: {
      replaceText: recivedMyText + ' ',
      containsText: {
        text: buffMyText,
      },
    },
  },
];

后来改成给临时文本加包裹,想用正则替换之间的内容。第一次写的正则是const regex = '\\*(.*?)\\*';,虽然在RegExr里测试没问题,但用到Google Docs API里不管用。之后换了@sln给的正则'([\S\s]*?)(?=\*)',还是没解决准确替换的问题。对应的请求代码:

// 第一次正则尝试的请求
const requests = [
  {
    replaceAllText: {
      replaceText: recivedMyText + '',
      containsText: {
        matchCase: true,
        text: regex,
        wildcardRegex: true, 
      },
    },
  },
];

// @sln版本的请求
const requests = [
  {
    replaceAllText: {
      replaceText: recivedMyText,
      containsText: {
        matchCase: true, 
        text: '([\S\s]*?)(?=\*)', // prettier-ignore
        wildcardRegex: true, 
      },
    },
  },
];

解决方法

先搞懂Google Docs API的正则规则

Google Docs API的wildcardRegex不是完全支持标准正则语法,它的规则更简单:

  • .* 匹配任意字符序列(包括换行)
  • ? 匹配任意单个字符
  • 要匹配实际的*字符,得转成\*(因为API里*本身是通配符)

之前用的标准正则语法在API里不生效,得改成适配它的写法。

正确的替换请求写法

单段临时文本的替换

如果每次只处理一段*包裹的内容,直接匹配*开头和结尾的内容就行:

// 写入临时文本时记得用*包裹,比如 `*${快速识别的文本}*`
const requests = [
  {
    replaceAllText: {
      replaceText: 准确识别的文本,
      containsText: {
        text: '\\*.*\\*', // 匹配从*开始到*结束的任意内容
        wildcardRegex: true,
        matchCase: true
      }
    }
  }
];

多段临时文本的精准替换

如果文档里同时有多个*包裹的临时文本,怕替换错的话,给每个临时段加个唯一标识,比如UUID,格式改成*[唯一ID]${临时文本}*,替换时只匹配带这个ID的内容:

// 写入临时文本的时候:
const tempId = crypto.randomUUID(); // 生成唯一ID
const tempText = `*[${tempId}]${快速识别的文本}*`;
// 把tempText写入文档的代码...

// 替换时的请求:
const requests = [
  {
    replaceAllText: {
      replaceText: 准确识别的文本,
      containsText: {
        text: `\\*\\[${tempId}\\].*\\*`, // 匹配带指定ID的*包裹内容
        wildcardRegex: true,
        matchCase: true
      }
    }
  }
];

额外注意事项

  • 写入临时文本后,先确认文档里确实存在对应的*包裹内容,避免写入失败导致后续替换无目标
  • 替换后可以检查下文档内容,要是没成功就重试一次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:25:36