土耳其字符串的子串

时间:2016-06-09 09:15:59

标签: javascript string utf-8 substring

我有一个像这样的字符串

var element = "İstanbul";

当我将它转换为小写时:

var element = element.toLowerCase();

它变成了

"istanbul"

我需要小写字符串"istanbul的子字符串“。

所以,当我在lowerCase操作之前执行此操作

element.substr(0,2)

输出正确

enter image description here

但是当我执行以下操作时,我知道substr(0,2)应该提供"is"而不是i

enter image description here

为什么会发生这种情况?我该如何纠正?

2 个答案:

答案 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();