2016-05-26 2 views
5

Я хочу получить символы после символа @ до символа пробела.String Matching Javascript

например. если моя строка похожа на hello @world. some [email protected]. Затем я хочу получить символы «мир» и «stackoverflow».

Вот что я пытался.

var comment = 'hello @world. some [email protected]'; 
var indices = []; 
    for (var i = 0; i < comment.length; i++) { 
     if (comment[i] === "@") { 
      indices.push(i); 
      for (var j = 0; j <= i; j++){ 
       startIndex.push(comment[j]); 
      } 
     } 
    } 

я могу получить вхождения @ и пространств, а затем обрезать эту часть, чтобы получить мое содержание, но я хотел бы лучше решение/предложение для этого, с без Regex. Заранее спасибо.

+4

Почему вы хотите решение без регулярного выражения? Это именно то, что было сделано для регулярного выражения. –

+1

'str.split ('@'). Splice (1) .map (function (w) {return w.split ('') [0];})' – haim770

+1

http://stackoverflow.com/questions/15265605/how-to-pull-mentions-out-of-strings-like-twitter-in-javascript, https://www.npmjs.com/package/mentions-regex –

ответ

4

Вы можете использовать это регулярное выражение:

/@(\S+)/g 

и захватить в плен группы, используя метод exec в цикле.

Данное регулярное выражение соответствует @, а затем \S+ соответствует одному или нескольким без пробелам символов, которые группируются в пленную группу.

Код:

var re = /@(\S+)/g; 
 
var str = 'hello @world. some [email protected]'; 
 
var m; 
 
var matches=[]; 
 

 
while ((m = re.exec(str)) !== null) { 
 
    matches.push(m[1]); 
 
} 
 

 
document.writeln("<pre>" + matches + "</pre>");

PS: Обратите внимание, что вам нужно будет использовать

/@([^.\s]+)/g 

, если вы не хотите, чтобы захватить DOT после word.

+1

Спасибо большое! Работал отлично. Также любая хорошая ссылка, если вы можете порекомендовать с большим количеством примеров для изучения регулярных выражений? Заранее спасибо! –

+1

Предлагаю прочитать это: http://www.regular-expressions.info/ – anubhava