如何检测 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: '
我没有测试过,但这样的东西可能有用。
我为包含中文字符的自定义查询语言编写了一个小型解析器。当检测到语法错误时,输出错误信息如下:
語法錯誤:應為數,但為字串。
索引 = '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: '
我没有测试过,但这样的东西可能有用。