如何检测 javascript 中的宽字符?

Howto detect wide characters in javascript?

我为包含中文字符的自定义查询语言编写了一个小型解析器。当检测到语法错误时,输出错误信息如下:

語法錯誤:應為數,但為字串。
索引 = '3213茂訊'"
       ^

最后一行只有一个'^'字符表示错误标记的位置。由于汉字的视觉长度占据了另外两个字符,我需要检测宽字符来计算'^'位置以指示正确的标记。有谁知道某些函数可以检测 javascript 中的宽字符?

我不确定我的理解是否正确。但是您可能想尝试 https://www.npmjs.com/package/wcwidth 包。可以这样实现:

import wcwidth from 'wcwidth';

const getCharAtPosition = (str, position) => {
  let currPos = 0;
  return [...str].find(char => {
    const charWidth = wcwidth(char);
    const isPosition =
      currPos === position || (charWidth === 2 && currPos === position - 1);
    currPos += charWidth;
    return isPosition;
  });
};

const indicatorPos = '       ^'.indexOf('^');
console.log(getCharAtPosition(`索引 = '3213茂訊'"`, indicatorPos));
// will log: '

我没有测试过,但这样的东西可能有用。