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

时间:2013-01-16 02:00:57

标签: javascript search multibyte

我有一个字符串

var str = "か22222";

我想像这样搜索

str.indexOf( “か2”);其中“か2”都是多字节字符,“str”只有“か”作为多字节

但我仍然应该将indexOf的结果设为0。

有没有办法做到这一点是JS ??

2 个答案:

答案 0 :(得分:2)

没有。无论出于何种可怕的历史原因,角色2(U + 32,DIGIT TWO)和角色(U + FF12,FULLWIDTH DIGIT TWO)都是两个完全不同的东西 - 搜索一个将与另一个不匹配。

答案 1 :(得分:0)

嗯,最简单的事情就是

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

您还可以使用[1-9]之类的字符作为字符范围,因为全宽数字占用了连续的代码点。

更通用的解决方案是在“多字节”(更好地称为“全宽”)和某些点上的单宽字符之间进行转换。稍微hacky转换是将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);

现在您可以搜索全角字符串。

最好为Javascript使用Unicode库或规范化器。