我正在使用img标签替换我的文本编辑器中的笑脸快捷方式,但我使用的逻辑也将链接和标签的部分视为笑脸快捷键(例如:/在http://中,或者:p在游标中:指针在风格中属性)
如何在用图像替换笑脸快捷方式时忽略所有链接和html标记?
for(var key in shortcuts){
// Check if the editor html contains the looped shortcut
if(content.toLowerCase().indexOf(key) != -1){
// Escaping special characters to be able to use the shortcuts in regular expression
var k = key.replace(/[<>*()?']/g, "\\$&");
// Make shortcuts case insensitive
var regex = new RegExp(k, "ig");
//Replace shortcuts with img tags (smileys)
tinymce.activeEditor.setContent(content.replace(regex,'<img src="images/transparent.png" class="smiley_icon '+ shortcuts[key] +'">'));
}
}
Run Code Online (Sandbox Code Playgroud)
我认为我采用的方法是将所有不好的东西与一切好的东西相匹配.然后在表达式中只将我感兴趣的文本字形放入捕获组.稍后在编程逻辑中我将测试每个匹配以查看捕获组1是否已填充,如果是,则匹配.index将显示字符串中的位置匹配发生了.
这个表达式会发现所有的:/,:),:p,标签和URL,但捕获组1将仅包含:),:/或者:p这是不是一个标签或URL的一部分.
https?:\/\/[^\s]*|<\/?\w+\b(?=\s|>)(?:='[^']*'|="[^"]*"|=[^'"][^\s>]*|[^>])*>|(:\)|:P|:\/)

https?:\/\/[^\s]* 匹配纯文本的网址| 要么<\/?\w+\b(?=\s|>)(?:='[^']*'|="[^"]*"|=[^'"][^\s>]*|[^>])*> 匹配任何打开或关闭的html标签| 要么(:\)|:P|:\/) 捕获组1将获得所需的文本字形 实例:http://regexr.com?35cv9(将鼠标悬停在蓝色匹配项上,查看每个捕获组和索引)
示范文本
<a href=http://i.like.kittens style="cursor:point"> :) I had a :/ great time :p </a> check out http://some.url.com
Run Code Online (Sandbox Code Playgroud)
火柴
[0] => Array
(
[0] => <a href=http://i.like.kittens style="cursor:point">
[1] => :)
[2] => :/
[3] => :p
[4] => </a>
[5] => http://some.url.com
)
[1] => Array
(
[0] =>
[1] => :)
[2] => :/
[3] => :p
[4] =>
[5] =>
)
Run Code Online (Sandbox Code Playgroud)