2016-05-26 35 views
5

Voglio ottenere i caratteri dopo il simbolo @ fino a un carattere spazio.Corrispondenza delle stringhe Javascript

per es. se la mia stringa è come hello @world. some [email protected]. Quindi voglio ottenere i caratteri 'world' e 'stackoverflow'.

Ecco cosa ho provato.

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

posso ottenere le occorrenze di @ e gli spazi e poi ritagliare la parte per ottenere il mio contenuto, ma mi piacerebbe una soluzione migliore/suggerimenti per questo, con non REGEX. Grazie in anticipo.

+4

Perché vuoi una soluzione senza regex? Questo è esattamente ciò che è stato fatto fare regex. –

+1

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

+1

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

risposta

4

È possibile utilizzare questa espressione regolare:

/@(\S+)/g 

e gruppi afferrare catturati utilizzando exec metodo in un ciclo.

Questa espressione regolare corrisponde a @ e quindi \S+ corrisponde a 1 o più caratteri non spaziali raggruppati in un gruppo acquisito.

Codice:

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: Nota: è necessario utilizzare

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

se non si desidera catturare punto dopo word.

+1

Grazie mille! Ha funzionato perfettamente bene. Anche qualche buon riferimento se si può consigliare con un sacco di esempi per l'apprendimento regex? Grazie in anticipo! –

+1

Suggerisco di leggere questo: http://www.regular-expressions.info/ – anubhava