如何将@usernames和#hashtags与jquery.linkify插件链接

时间:2011-06-01 19:09:49

标签: jquery regex linkify hashtag

我正在使用这个jquery插件:https://github.com/maranomynet/linkify/blob/master/1.0/jquery.linkify-1.0.js

使用这个REGEX插件,我正在尝试链接@usernames和#hashtags ......

  linkify.plugins = {
  tUser: {
      re: /(^|\s)@(\w+)/gi,
      tmpl: '$1@<a href="http://domain.com/$2">$2</a>'
  },
  tHashtag: {
      re: /(^|["'(]|&lt;|\s)(#.+?)((?:[:?]|\.+)?(?:\s|$)|&gt;|[)"',])/gi,
      tmpl: function (match, pre, hashTag, post) {
            return pre+'<a href="http://domain.com/search.php?q='+ encodeURIComponent(hashTag) +'">'+hashTag+'</a>'+post;
      }
  }
};

...但是我遇到了一些奇怪的组合问题:

(在 BOLD 应该链接的内容但不是)

#hash #hash )(#hash)/ #hash

@ user @ user)(@ 用户)/ @ 用户

有关如何修复REGEX以匹配此变体的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:3)

我对linkify不是很熟悉,但我会试一试。

第一个正则表达式( @user )的问题在于它不匹配,因为它需要前导空格或换行符 - 这是(^|\s)部分。至于 #hash 正则表达式,嗯......这似乎不必要的复杂。请尝试以下方法:

linkify.plugins = {
  tUser: {
    re: /(^|\s|[^\w\d])@(\w+)/gi,
    tmpl: '$1@<a href="http://domain.com/$2">$2</a>'
  },
  tHashtag: {
    re: /(^|\s|[^\w\d])#(\w+)/gi,
    tmpl: function (match, pre, hashTag) {
            return pre+'<a href="http://domain.com/search.php?q='+
                   encodeURIComponent(hashTag) +'">#'+hashTag+'</a>';
    }
  }
};

这将匹配 @user #hash ,只要它们前面有换行符,空格或非单词,非数字字符(不是az,AZ或0-9)。因此,您的括号不会干扰,但大多数电子邮件地址也不会被接收。

请注意,哈希符号不会包含在您对链接哈希标记的搜索中。