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()
(我假设是这样,因为映射使用字符串)