2012-05-16 2 views
1
The quick brown #fox jumped over the #reallyBigFence. 

Результат должен быть: ['fox','reallyBigFence']В Javascript, как я могу получить «теги» строки в массив?

Все теги беспредельный, и они начинаются с хэш-тегом.

Я новичок в регулярных выражений, но я думаю, что это будет работать (не уверен): /#([a-z0-9]+)/gi

Что мне делать с этим регулярное выражение? .совпадение?

ответ

2

Да, просто .match():

var resultarray = "The quick brown #fox jumped over the #reallyBigFence." 
    .match(/#([a-z0-9]+)/gi); 

Метод матч возвращает массив из найденных подстрок (потому что регулярное выражение имеет глобальный флаг), в противном случае null, если ничего не найдено. Тем не менее, он возвращает полную строку соответствия, а не группы захвата, поэтому приведенное выше приведет к ["#fox","#reallyBigFence"]. Как JavaScript не знает Lookbehind, вам нужно будет исправить это потом с

if (resultarray) // !== null 
    for (var i=0; i<resultarray.length; i++) 
     resultarray[i] = resultarray[i].substr(1); // remove leading "#" 
+1

Это может быть лучше использовать '/ # ([^ \ s] +) /' или '/ # (\ W +) /' поскольку допустимые символы в слове могут включать дефисы и другие символы, а не 'a-z0-9'. – RobG

+0

@RobG '/ # (\ w +) /' получает только '# lazy' здесь' "... перепрыгнул через # lazy-dog" ' – ajax333221

+0

Да,' \ w' соответствует символам слов, RegExp не думает дефисы принадлежат словам. :-(Я просто указывал, что вам нужно будет играть с шаблоном, чтобы получить то, что вы хотите, так как вы не определили его явно. Возможно, '/ # ([\ w -] +)/g' или аналогичный. – RobG

Смежные вопросы