Javascript如何搜索双字节字符串与单字节字符串,反之亦然

Javascript how to search double byte string with single byte string and vice versa

本文关键字:字节 字符串 反之亦然 单字节 何搜索 搜索 Javascript      更新时间:2023-09-26

我有一个字符串

var str = "か22222";

我想这样搜索

str.indexOf(" info2 ");其中" 2"都是多字节字符,而"str"只有" "作为多字节

但是我仍然应该得到indexOf的结果为0。

是否有任何方法做到这是JS ??

No。字符2 (U+32, DIGIT TWO)和字符 (U+FF12, FULLWIDTH DIGIT TWO)是两个完全不同的东西,无论出于什么可怕的历史原因,搜索其中一个将不匹配另一个。

最简单的方法就是

var result=str.match(/か[22]/);
alert("match at "+result.index);

您也可以使用[1-9]这样的字符范围,因为全宽数字占用连续的代码点。

一个更通用的解决方案是在"多字节"(更广为人知的是"全宽度")和单宽度字符之间进行转换。稍微有点粗糙的转换是将0xfee0添加到相应的半宽度代码点。假设您要将输入字符串转换为全宽度表单;你可以这样做:

var arr=[];
for(var i;i<str.length;i++){
  arr[i] = str.charPointAt(i);
  i(arr[i]>=0x30 && arr[i]<=0x39) { arr[i] += 0xfee0; }
}
var full_width_string=String.fromCharCode.apply(null,arr);

现在你可以搜索全宽字符串。

最好使用Unicode库或Javascript规范器