具有URL激活的JavaScript正则表达式以及表情符号等

时间:2013-11-22 12:57:20

标签: javascript regex

我正在转换我的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);

1 个答案:

答案 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"