不使用 ES6 或 ES5 的 Unicode Aware String.split('')
Unicode Aware String.split('') without using ES6 or ES5
var emoji = '';
var s = emoji.split(''); // ["�", "�"] String.split('') destroys surrogate pairs.
var s = emoji.splitUnicodeAware(''); // ['']
迭代器/ES6 是不允许的,Array.from
、正则表达式 /u
标志、[...spread]
语法等也是如此
也欢迎任何相关链接。
这两个示例都适用于 Firefox 27 (2014) 或更高版本。我会说那是
合理便携:
const s = '';
// example 1
let a1 = [];
for (let s1 of s) {
a1.push(s1);
}
// example 2
let a2 = [...s];
// print
console.log(a1, a2);
假设输入字符串是 well-formed(不包含开头的破字符),假设代理项对的范围从 D800 到 DBFF(十六进制),每个 unicode.org,所有你需要做的是检查字符是否在该范围内,以决定是捕获一个字符还是两个字符:
var emoji = 'foo IU bar ';
var matches = emoji.match(/[^\uD800-\uDBFF]|[\s\S]{2}/g);
console.log(matches);
如果您也想验证尾随代理项,请将尾随字符匹配为十六进制的 DC00 到 DFFF。
var emoji = '';
var s = emoji.split(''); // ["�", "�"] String.split('') destroys surrogate pairs.
var s = emoji.splitUnicodeAware(''); // ['']
迭代器/ES6 是不允许的,Array.from
、正则表达式 /u
标志、[...spread]
语法等也是如此
也欢迎任何相关链接。
这两个示例都适用于 Firefox 27 (2014) 或更高版本。我会说那是 合理便携:
const s = '';
// example 1
let a1 = [];
for (let s1 of s) {
a1.push(s1);
}
// example 2
let a2 = [...s];
// print
console.log(a1, a2);
假设输入字符串是 well-formed(不包含开头的破字符),假设代理项对的范围从 D800 到 DBFF(十六进制),每个 unicode.org,所有你需要做的是检查字符是否在该范围内,以决定是捕获一个字符还是两个字符:
var emoji = 'foo IU bar ';
var matches = emoji.match(/[^\uD800-\uDBFF]|[\s\S]{2}/g);
console.log(matches);
如果您也想验证尾随代理项,请将尾随字符匹配为十六进制的 DC00 到 DFFF。