【发布时间】:2021-10-04 12:33:34
【问题描述】:
我有以下函数用给定的表情符号替换字符串代码。
export const CHARS = {
":)": "????",
"(:": "????",
":-)": "????",
":(": "????",
"):": "????",
":-(": "????",
":/": "????",
}
convertEmoji = string => {
const escape = s => s.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&")
const pattern = new RegExp(
Object.keys(CHARS).map(escape).join("|"),
"g"
)
return string.replace(pattern, match => CHARS[match])
}
这按预期工作,但当任何给定的 CHARS[key] 出现在单词中时,它也会转换。
例如,将此函数传递给包含 URL 的字符串:
https://google.com
变成:
https????/google.com
我希望仅当表情符号代码在给定句子中显示为单词时才可以使用替换功能。例如:
:) Hello world! - 函数在这里应该可以工作。
:)Hello world! - 在这里它不应该工作,因为表情符号代码没有正确的空格。
请帮我解决这个问题。
【问题讨论】:
-
为什么您首先会将
https://google.com传递给convertEmoji? -
如果之前或之后有某些字符,您可以添加否定环视以防止匹配。
-
@h0r53 大概是用户聊天输入,他们可能会输入一个 URL。
标签: javascript regex replace emoji