Как связать @usernames и #hashtags с плагином jquery.linkify - PullRequest
1 голос
/ 01 июня 2011

Я использую этот плагин 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;
      }
  }
};

... но у меня проблемы с нечетными комбинациями:

(In BOLD что должно быть связано, но это не так)

# хеш # хеш ) ( # хеш ) / # хеш

@ пользователь @ пользователь ) (@ пользователь ) / @ пользователь

Есть идеи о том, как я могу исправить REGEX, чтобы соответствовать этим вариациям?

Спасибо!

1 Ответ

3 голосов
/ 02 июня 2011

Я не очень хорошо знаком с 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 , либо # хэш , если им предшествует символ новой строки, пробела или неслово, не цифра (не az, AZ или 0-9).Таким образом, ваши круглые скобки не будут мешать, но большинство адресов электронной почты также не будут выбраны.

Обратите внимание, что символ хеша не будет включен в ваш поиск по ссылочным хеш-тегам.

...