2016-05-26 13 views
5

Karakterlerden sonra boşluk karakteri olana kadar @ karakteri almak istiyorum. Örneğin,Dize Eşleştirme Javascript

. dizgim hello @world. some [email protected] gibi ise. Sonra karakterleri 'dünya' ve 'stackoverflow' almak istiyorum.

İşte denediğim şey.

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]); 
      } 
     } 
    } 

Ben @ ve boşluk tekrarlarını almak ve sonra benim içeriği almak için bu bölümü Döşeme ama REGEX olmadan, bunun için daha iyi bir çözüm/öneri istiyorum yapabilirsiniz. Şimdiden teşekkürler.

/@(\S+)/g 

ve kapmak yakalanan grupların bir döngü içinde exec yöntemi kullanarak:

+4

Neden regex olmadan bir çözüm istiyorsun? Bu tam olarak regex'in yapılması için yapıldı. –

+1

'str.split ('@') ekleme (1) .map (işlev (w) {return w.split ('') [0];})' – haim770

+1

http://stackoverflow.com/questions/15265605/nasıl-to-pull-mentions-out-of-dizeleri-gibi-twitter-in-javascript, https://www.npmjs.com/package/mentions-regex –

cevap

4

Bu normal ifadeler kullanabilirsiniz.

Bu regex, @ ile eşleşir ve daha sonra \S+, yakalanan bir grupta gruplandırılmış 1 veya daha fazla boşluk olmayan karakterle eşleşir.

Kodu:

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: word sonra DOT yakalamak istediğiniz yoksa

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

kullanmanız gerekecektir unutmayın.

+1

Çok teşekkürler! Tamamen iyi çalıştı. Ayrıca regex öğrenme için birçok örnek önerebilirseniz iyi bir referans? Şimdiden teşekkürler! –

+1

Bunu okumayı öneririm: http://www.regular-expressions.info/ – anubhava