众所周知,表情符号编码需要 3 或 4 个字节才能表示,因此在我的字符串中可能会占用 2 个符号。例如,“wew”.length = 7 我想要在文本中查找这些符号,并将其替换为依赖于其代码的值。在阅读 Stack Overflow 的帖子时,我遇到了 XRegExp 库和 unicode 插件,但是不知道如何使用它。
var str = 'wew';// \u1F601 symbol
var reg = XRegExp('[\u1F601-\u1F64F]', 'g'); // /[ὠ1-ὤF]/g -doesn't make a lot of sense
//var reg = XRegExp('[\uD83D\uDE01-\uD83D\uDE4F]', 'g'); //Range out of order in character class
//var reg = XRegExp('\\p{L}', 'g'); //doesn't match my symbols
console.log(XRegExp.replace(str, reg, function(match){
return encodeURIComponent(match);// here I want to have smth like that %F0%9F%98%84 to be able to map anything I want to this value and replace to it
}));
我真的不想暴力破解字符串,寻找我的范围内字符的序列。有人能帮我用正则表达式找到方法吗?
编辑 刚想到一个列举所有表情符号的想法。比暴力破解好,但仍在寻找更好的想法。
var reg = XRegExp('\uD83D\uDE01|\uD83D\uDE4F|...','g');
'[\u1F601-\u1F64F]'
是匹配这些点的正确方式(尽管块是U+1F300-U+1F5FF)。 - 一二三\u1F601
编码了两个字符,即U+1F60和ASCII '1'。无法在字符类中使用U+1F601
。 - n. m./[\uD800-\uDBFF][\uDC00-\uDFFF]/g
解决了我的问题。它不仅包括表情符号,还包括特殊字符。参考自https://dev59.com/tG865IYBdhLWcg3wlviq。 - Chemical Programmer