我正在转换我的PHP代码,用图像替换笑脸代码,激活链接和其他一些东西到JavaScript。
另外这些功能运作良好,但我和this一起遇到了同样的问题。我认为这种方法有点矫枉过正,我在PHP中使用了以下正则表达式,避免了与激活链接的冲突
loop..
$message = preg_replace('#(?<!\w)'.$smiley.'(?!\w)#i', '<img src="images/smilies/'.$img.'" class="smiley" />', $message);
endloop
有没有办法将此正则表达式转换为JavaScript有效规则?感谢
编辑以澄清我正在做什么/如何做:
var input = 'HellO! :* :P ;P :-( http://google.com www.google.com';
//input = input.replace(/(\b(((https?|ftp|file):\/\/)|(www\.))[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,'<a href="$1">$1</a>');
var smilies = {
'sad.png': [':\(', ':-\('],
'kiss.png': [':\*', ':-\*', ';\*', ';-\*'],
'tongue.png': [':P', ':-P', ';P', ';-P']
};
for(var smiley in smilies) {
input = input.replace(new RegExp(smilies[smiley].join('|'), "gi"), '<img src="images/smilies/'+ smiley +'" class="smiley" />');
}
console.log(input);
答案 0 :(得分:1)
Javascript不支持lookbehind所以你可以做的是寻找单词边界。请考虑以下代码:
var re = new RegExp('\\b' + smiley + '(?!\\w)', 'gi');
message = message.replace(re, '<img src="images/smilies/' + img + '" class="smiley" />');
保持输入不变,您可以使用for loop
这样的转义输入匹配中的每个特殊字符:
for(var smiley in smilies) {
input = input.replace(new RegExp(smilies[smiley].join('|')
.replace(/[*()$]/g, '\\$&'), "gi"),
'<img src="images/smilies/'+ smiley +'" class="smiley" />');
}
"HellO! <img src="images/smilies/kiss.png" class="smiley" /> <img src="images/smilies/tongue.png" class="smiley" /> <img src="images/smilies/tongue.png" class="smiley" /> <img src="images/smilies/sad.png" class="smiley" /> http://google.com www.google.com"