Я думаю, что вы используете $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>');
И вам не нужно экранировать дефис, если его нельзя принять за индикатор диапазона.