问题描述
我正在尝试根据用户输入的查询来匹配一些文本。遇到一些问题后,我发现String.indexOf
的这种相当奇怪的行为我根本无法理解:
如果我尝试将不带变音符的查询与带变音符的字符串进行匹配,它将起作用:(不确定原因)
"brezzel cu brânză".indexOf("bra")
11
但是将相同的字符串与后面的另一个字母匹配是行不通的:
"brezzel cu brânză".indexOf("bran")
-1
(在Chrome和Firefox中均经过测试,行为相同)
这是我不知道的记录行为,还是这里到底发生了什么?
解决方法
如果我没记错的话,js字符以2个字节编码。但是许多其他Unicode字符编码为4个字节。现在charâ是4个字节。前2个字节是a,这就是第一种情况起作用的原因。使用转义功能查看:
escape("brezzel cu brânză")
"brezzel%20cu%20bra%u0302nza%u0306"
看到%20
是空格,然后是bra,然后是%u0302
,它与前一个a
一起编码â
。
可能您可以告诉其他人。如果需要,请对其进行测试:
'a' + String.fromCharCode('0x0302') //â