用表情符号替换字符串的最有效方法

Ale*_*lex 2 javascript regex lodash reactjs

什么是替换文本的最有效方法:)->。

因此,假设我有一个类似“ Hello :)我叫亚历克斯”的文字。我应该将文本转换为“你好,我叫亚历克斯”

我在lodash实用程序库的帮助下解决了这个问题。

const replaceStringWithEmoji = (string) => {
  const emojiMap = {
    ':)': '',
    ':(': '',
    ':D': '',
    ';(': '',
    ':O': '',
    ';)': '',
    '8)': '',
    '>:@': '',
  };

  const emojis = [...Object.keys(emojiMap)];
  return _.join(_.map(_.split(string, ' '), (s) => {
    if (_.includes(emojis, s)) {
      return emojiMap[s];
    }
    return s;
  }), ' ');
};
Run Code Online (Sandbox Code Playgroud)

必须有一种更好的方法。也许与正则表达式?

短期回报

 return _.join(_.map(_.split(string, ' '), s => _.includes(emojis, s) ? emojiMap[s] : s), ' '); 
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 5

我将通过获取键,转义所有特殊字符并通过来构造模式|。然后通过在对象上查找匹配的字符串进行替换:

const escape = s => s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');

const replaceStringWithEmoji = (string) => {
  const emojiMap = {
    ':)': '',
    ':(': '',
    ':D': '',
    ';(': '',
    ':O': '',
    ';)': '',
    '8)': '',
    '>:@': '',
  };
  const pattern = new RegExp(
    Object.keys(emojiMap).map(escape).join('|'),
    'g'
  );
  return string.replace(pattern, match => emojiMap[match]);
};

console.log(replaceStringWithEmoji('foo :) bar'));
console.log(replaceStringWithEmoji('foo :) bar 8) baz'));
Run Code Online (Sandbox Code Playgroud)