1

我正在使用这个 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;
      }
  }
};

...但是我在奇怪的组合上遇到了一些麻烦:

粗体字应该链接但不是)

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

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

关于如何修复 REGEX 以匹配这种变化的任何想法?

谢谢!

4

1 回答 1

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)。所以你的括号不会干扰,但大多数电子邮件地址也不会被提取。

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

于 2011-06-01T23:50:48.873 回答