我正在与一些基本的表情符号建立一个简单的聊天。因此,当用户例如键入:)
时,输入字段中会显示一个笑脸表情符号。
然而,当涉及到表情符号:/
时,我的正则表达式失败了,原因是它弄乱了URL。 (请记住,在密钥上触发表情符号检测)。
示例测试文本:
您好,请访问我的网站http://www.example.com或https://www.example.com:/://
因此,总结一下,当:/
或http
开始时,正则表达式不得替换为https
。
目前在我的地图中我有这个:"[^http?s]:/{1}(?!/)": "1F615"
但是由于一些奇怪的原因,它会“在替换时吃掉前一个角色”。
答案 0 :(得分:1)
由于问题是:/
搞砸了http://
,并且JavaScript不支持lookbehinds(“检查这是不是之前发生/不发生”),我认为最简单的解决方案只是检查:/
是否(不)跟随另一个/
":/(?!/)" : "1F615"
值得注意的是,前瞻(JavaScript支持 )实际上并不匹配后续/
,它只是确保它不在那里。
答案 1 :(得分:0)
这应该有效
function reverse(s){
return s.split("").reverse().join("");
}
function getMatch(str){
const regex = /\/+\:(?!s{0,1}ptth)/g;
const subst = ``;
const result = reverse(reverse(str).replace(regex, subst));
console.log(result);
}
getMatch(`Hello could you please visit my website at http://www.example.com or https://www.example.com :/ ://`);
由于Javascript不支持负面后瞻,但确实支持负前瞻,我们通过反转字符串,替换然后再次反转来利用这个优势