我有一个像这样的字符串
var element = "İstanbul";
当我将它转换为小写时:
var element = element.toLowerCase();
它变成了
"istanbul"
我需要小写字符串"istanbul
的子字符串“。
所以,当我在lowerCase操作之前执行此操作
element.substr(0,2)
输出正确
但是当我执行以下操作时,我知道substr(0,2)
应该提供"is"
而不是i
为什么会发生这种情况?我该如何纠正?
答案 0 :(得分:3)
这种情况正在发生,因为在更改为小写字母时,字符串已标准化,İ
变为2个字符:"i"
(http://www.fileformat.info/info/unicode/char/0069/index.htm)和"̇"
(后者)是一个变音标记http://www.fileformat.info/info/unicode/char/0307/index.htm)。
为了防止它,您可以使用ES2015字符串迭代工具将字符串拆分为字符,并将字符分别小写:
const arr_l_new = [...str].map(s => s.toLowerCase());
然后你可以取前N个字符:
const first_2_chars = arr_l_new.slice(0, 2).join('');
注意:如果你计算first_2_chars
的长度,你会注意到它的长度为3
,这是由于变音字符,实际上对于小写{{1}是不可见的}}
i
答案 1 :(得分:1)
试
element.toLowerCase().replace(new RegExp("İ".toLowerCase(), "g"), "i");
而不是
element.toLowerCase();