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)
我将通过获取键,转义所有特殊字符并通过来构造模式|。然后通过在对象上查找匹配的字符串进行替换:
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)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |