Ano*_*non 4 javascript regex unicode emoji
我在使用 unicode 将字符串中的表情符号替换为字符串时遇到问题。
例如:
我有字符串:
const str = "My string is with emoji "
我需要将此字符串转换为
const str = "My string EMOJI UNICODE is with emoji EMOJI UNICODE"
表情符号 unicode 应如下所示:[e-1f60e]。因为我有将带有 unicode 的字符串转换为带有表情符号的字符串的函数:
function convertEmoji(str) {
return str.replace(/\[e-([0-9a-fA-F]+)\]/g, (match, hex) =>
String.fromCodePoint(Number.parseInt(hex, 16))
);
}
console.log(convertEmoji('string [e-1f60e] sadfsadfsadf')); // "string sadfsadfsadf"
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 11
您可以像在函数中一样使用replace其他方式。这个答案为现代 JavaScript 提供了一个匹配各种“表情符号”范围的正则表达式。然后在回调中,您可以使用codePointAt获取表情符号的代码点的值,通过 将其转换为十六进制toString(16),并返回所需格式的字符串:
const str = "My string is with emoji "
const rex = /[\u{1f300}-\u{1f5ff}\u{1f900}-\u{1f9ff}\u{1f600}-\u{1f64f}\u{1f680}-\u{1f6ff}\u{2600}-\u{26ff}\u{2700}-\u{27bf}\u{1f1e6}-\u{1f1ff}\u{1f191}-\u{1f251}\u{1f004}\u{1f0cf}\u{1f170}-\u{1f171}\u{1f17e}-\u{1f17f}\u{1f18e}\u{3030}\u{2b50}\u{2b55}\u{2934}-\u{2935}\u{2b05}-\u{2b07}\u{2b1b}-\u{2b1c}\u{3297}\u{3299}\u{303d}\u{00a9}\u{00ae}\u{2122}\u{23f3}\u{24c2}\u{23e9}-\u{23ef}\u{25b6}\u{23f8}-\u{23fa}]/ug;
const updated = str.replace(rex, match => `[e-${match.codePointAt(0).toString(16)}]`);
console.log(updated);Run Code Online (Sandbox Code Playgroud)
另请参阅Wiktor 的回答。ES2018 添加了 Unicode 属性转义。但不幸的是,支持仍然参差不齐,尽管他在答案中使用的支持可以在 Chromium 及其衍生品(Chrome、Brave、Chromium Edge)和 iOS Safari 中运行,但遗憾的是还不能在 Firefox 中运行。
如果您的目标是 ECMAScript 2018 及更高版本,您可以使用
/\p{Emoji}/ug
Run Code Online (Sandbox Code Playgroud)
JS 演示:
/\p{Emoji}/ug
Run Code Online (Sandbox Code Playgroud)