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

在Monaco Editor中如何获取Token的实际值?

获取Monaco Tokenize结果中的Token实际值

monaco.editor.tokenize方法返回的token[][]结构里,每个token确实只包含language、offset和type属性,不过你可以通过原文本结合token的offset属性提取实际值,具体操作如下:

  1. 先将原文本按行拆分,因为token[][]是按行对应的(每一个子数组对应原文本的一行)
  2. 遍历每一行的tokens,通过当前token的offset和下一个token的offset(或行尾)计算出token的起止位置,再从该行文本中截取对应内容

代码示例

const text = "你的目标文本内容";
const tokens = monaco.editor.tokenize(text, "myLanguage");

// 将原文本拆分为行数组
const lines = text.split('\n');

tokens.forEach((lineTokens, lineIndex) => {
  const currentLine = lines[lineIndex];
  lineTokens.forEach((token, idx) => {
    // 计算当前token的结束位置
    const endOffset = idx < lineTokens.length - 1 
      ? lineTokens[idx + 1].offset 
      : currentLine.length;
    // 从原行文本中截取token值
    const tokenValue = currentLine.substring(token.offset, endOffset);
    
    // 按需处理token值,这里以打印为例
    console.log(`类型: ${token.type}, 值: ${tokenValue}`);
  });
});

补充说明

Monaco的tokenize方法设计上只返回语法高亮所需的位置和类型信息,不直接返回token值是为了避免重复存储原文本内容,提升性能。如果是在已有编辑器实例的场景下,也可以通过编辑器模型的getValueInRange方法获取,但离线tokenize时,上面的截取方法是最直接的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:32:43