gpt4 book ai didi

javascript - 将字符串转换为表情符号

转载 作者:行者123 更新时间:2023-12-04 17:16:40 24 4
gpt4 key购买 nike

我有以下函数,它用给定的表情符号字符替换字符串代码。

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! - 这里应该不起作用,因为表情符号代码没有正确的空格。

请帮我解决这个问题。

最佳答案

您需要为您的模式指定左侧和右侧上下文。

如果你想确保左边和右边没有紧邻的单词字符,你需要用 (?<!\w) 表示的明确的单词边界。和 (?!\w)环视:

new RegExp('(?<!\\w)(?:' + Object.keys(CHARS).map(escape).join("|") + ')(?!\\w)', "g")

或者,您可以依赖空白边界,这需要空白字符或两端的字符串开始/结束:

new RegExp('(?<!\\S)(?:' + Object.keys(CHARS).map(escape).join("|") + ')(?!\\S)', "g") 

如果您需要进一步精确的边界模式,请根据您的要求选择解决方案并精确查看环视中的模式。

关于javascript - 将字符串转换为表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68565962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com