Unicode字符
js对Unicode字符的支持是采用\uxxxx
形式表示的,其中xxxx表示字符的Unicode码点,但是这样的表示方法只能表示\u0000
-\uFFFF
之间的字符,超出这个范围的字符,必须采用四字节的形式表示。但是这样以来导致 '𠮷'.lenth=2
例如:
'\ud842\udfb7'==='𠮷' // true
'𠮷'.length===2 // true
因此我们需要一个精准匹配字符串的lenth的方法返回字符传的串的个数的函数,
此时我们可以利用es6对正则表达是提供的u
修饰符,在用match
方法匹配到字符之后,获取返回的数组的长度即为字符串的真实长度
代码
if(!String.prototype.customPointLength){
String.prototype.customPointLength=function(){
const text=this.toString()
const result=text.match(/[\s\S]/gu)
return result?result.length:0
}
}
// test
const s='𠮷'
s.customPointLength() // 1
nice ! 这样就可以返回字符串的真实长度见到一些双子节形式表达的生僻字或者符号也不算问题了