Синтаксический анализ твиттера @name с помощью регулярных выражений и JavaScript - PullRequest
1 голос
/ 12 мая 2011

Я пытаюсь разобрать теги имен в твиттере, используя javascript, и мне было интересно, сработает ли это регулярное выражение. Я думаю, что большая часть этого работает, но мне просто интересно, правильно ли я использую $ 1 и $ 2. Могут ли люди подтвердить, что это правильно, и если да, то вообще объяснить, что представляют собой 1 и 2 долл. США?

str = str.replace(/([^\w])\@([\w\-]+)/gm,'$1<a href="http://twitter.com/$2" target="_blank">@$2</a>'); 

Ответы [ 2 ]

5 голосов
/ 12 мая 2011

Я думаю, что вы используете $n право :

$ n или $ nn
Где n или nn являются десятичными цифрами, вставляет n-ю строку в скобках в скобках при условии, что первый аргумент был объектом RegExp.

Таким образом, ваш $1 будет заменен на то, что соответствует [^\w], а $2 будет заменено на то, что соответствует [\w\-]+. Тем не менее, я думаю, что вы хотите немного больше в своей первой группе, чтобы вы могли правильно сопоставлять строки, такие как "@pancakes", (^|\W+) будет служить вам лучше:

str = str.replace(/(^|\W+)\@([\w\-]+)/gm,'$1<a href="http://twitter.com/$2" target="_blank">@$2</a>');

Возможно, вы захотите прочитать о регулярных выражениях JavaScript .

И, благодаря Kobi, вы могли бы использовать более простое регулярное выражение, но вам придется немного изменить и заменить замену:

str = str.replace(/\B@([\w-]+)/gm, '<a href="http://twitter.com/$1" target="_blank">@$1</a>');

И вам не нужно экранировать дефис, если его нельзя принять за индикатор диапазона.

2 голосов
/ 12 мая 2011

Первая группа ([^ \ w]) должна быть необязательной, поэтому попробуйте следующее: / ([^ \ w])? \ @ ([\ W -] +) / gm

Отличный онлайн-инструмент для тестирования регулярных выражений можно найти здесь: http://gskinner.com/RegExr/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...