2012-10-30 14 views
11

Sto tentando di restituire le prime 5 parole di una stringa in un formato leggibile, senza "" o virgole che separano le parole. Non sono sicuro che sia una cosa regex o cosa, ma non riesco a capirlo anche se è probabilmente semplice. Grazie!jQuery restituisce prima 5 parole di una stringa senza virgole

Vedi quello che ho finora: http://jsfiddle.net/ccnokes/GktTd/

Questa è la funzione che sto usando:

function getWords(string){ 
    var words = string.split(/\s+/).slice(1,5); 
    return words; 
} 

risposta

26

L'unica cosa che manca è un join()

Prova questa:

function getWords(str) { 
    return str.split(/\s+/).slice(0,5).join(" "); 
} 

Questo farà qualcosa hing come:

var str = "This is a long string with more than 5 words."; 
console.log(getWords(str)); // << outputs "This is a long string" 

Date un'occhiata a this link per un ulteriore spiegazione della .join(). funzione in javascript. In sostanza, se non si fornisce un argomento, utilizza il delimitatore predefinito ,, mentre se ne fornite uno (come sto facendo nell'esempio sopra, fornendo " " - lo utilizzerà invece. Ecco perché l'output diventa le prime 5 parole, separate da uno spazio tra ogni

+3

Grazie Troy, non ha alcun problema. – ccnokes

+4

Ho dovuto usare .slice (0,5) o ha tagliato la prima parola. –

0

Tali virgole provengono da come output dati:.

//write to DOM 
$('<h2 />').text(getWords(str).join(' ')).appendTo('body'); 

Quando si aggiunge una stringa getWords(str), javascript tenta di convertire la matrice in una stringa - lo fa unendo le parole con le virgole. Se vuoi unirti a loro con qualcos'altro, usa join.

0

La soluzione di Troy Alford funziona, ma presenta uno svantaggio. Se tra le parole non ci sarà più di uno spazio, o di carattere di nuova riga (\ n) sarà convertito in unico spazio, ad esempio:

'jQuery è una
multi-browser'

saranno convertiti a

'jQuery è un multi-browser'

per risolvere questo problema, potremmo usare limite di parola regex. Potrebbe essere il seguente:

function getFirstWords(text, wordsAmount) { 
    const arr = text.split(/\b/g); 
    const arrItemsAmount = (/\b/.exec(text) && /\b/.exec(text).index) ? 
          wordsAmount * 2 : 
          wordsAmount * 2 - 1; 
    return arr.slice(0, arrItemsAmount).join(''); 
} 
Problemi correlati