Javascript 表情符号输入正则表达式搞砸了

Javascript 表情符号输入正则表达式搞砸了,javascript,regex,Javascript,Regex,我正在用一些基本的表情建立一个简单的聊天。因此,当用户例如键入:)时,会在输入字段中显示一个笑脸表情符号 然而,当涉及表情符号时,我的正则表达式失败了,原因是它弄乱了URL。(请记住,表情符号检测是在按键时触发的) 测试文本示例: 您好,请访问我的网站或:/:// 因此,总而言之,当正则表达式以http或https开头时,它不能替换:/ 目前在我的映射中,我有这样一个:“[^http?s]:/{1}(?!/)”:“1F615”,但出于某种奇怪的原因,它一直在“替换前一个字符”。这应该行得通 功

我正在用一些基本的表情建立一个简单的聊天。因此,当用户例如键入
:)
时,会在输入字段中显示一个笑脸表情符号

然而,当涉及表情符号时,我的正则表达式失败了,原因是它弄乱了URL。(请记住,表情符号检测是在按键时触发的)

测试文本示例:

您好,请访问我的网站或:/://

因此,总而言之,当正则表达式以
http
https
开头时,它不能替换
:/

目前在我的映射中,我有这样一个:
“[^http?s]:/{1}(?!/)”:“1F615”
,但出于某种奇怪的原因,它一直在“替换前一个字符”。

这应该行得通

功能反转{
返回s.split(“”).reverse().join(“”);
}
函数getMatch(str){
常量regex=/\/+\:(?!s{0,1}ptth)/g;
常量subst=`;
const result=reverse(reverse(str).replace(regex,subst));
控制台日志(结果);
}

你能访问我的网站吗http://www.example.com 或https://www.example.com :/ ://`);由于问题是
://
正在混乱
http://
,并且JavaScript不支持lookbehinds(“检查这之前是否发生过”),我认为最简单的解决方案就是检查
://
是否(没有)紧跟着另一个
//code>

":/(?!/)" : "1F615"

值得注意的是,前瞻(由JavaScript支持)实际上并不匹配后续的
/
,它只是确保它不在那里。

可能允许空白?问题不清楚,您是否可以添加示例输入和所需输出?您真正需要的是一个负面的后视。不幸的是,JavaScript正则表达式不支持负向后看。您如何执行正则表达式?JS RegExp中不支持lookbehind,因此您不能在RegExp中定义
x后但不包括y
x后但不包括y
。你必须过滤你自己想要/不想要的事件。
:/(?!/)
应该足够了,老实说。你可以看到它非常接近:“/”我不想在开头加空格。我和Sapce面临着完全相同的问题你是什么意思,我没有理解你啊。。。那个正则表达式并不像你想象的那样。。。比赛的开头有一个空格,你可以在演示中看到。如果我用表情符号替换类似的东西,is将替换“:/”而不是“:/”@NiettheDarkAbsol谢谢你指出我的错误,不知道它是如何工作的:PYou是正确的,这也是我所想的,但问题是正则表达式替换发生在keyup上。因此,当用户键入“http:/”时,它将在最后一个“/”被键入之前触发替换。如何反转字符串并进行负面展望,替换然后再次反转?是否应该是“\/(?!\/)”?@Syd,这会使事情变得有点复杂,一般来说,我强烈建议不要这样做,但是,如果您可以区分
键控
更改
(即键入完成),那么您可以在
键控
事件中使用
:/(?=[^/])“
(向前看确保除了另一个
/
)和
更改
事件中使用
“:/(?=[^/].$)”
(lookahead在文本末尾另外接受了
:/
)。老实说,我首先不喜欢表情符号替换。如果我想要@juanferer,如果你将它传递给
新的RegExp()
(我假设是这样,因为映射使用字符串)