2016-11-26 2 views
6

Ich versuche, dies zu machen:Aufteilen einer Zeichenfolge in ein Array von n Worten

"This is a test this is a test" 

in diese:

["This is a", "test this is", "a test"] 

ich dieses versucht:

const re = /\b[\w']+(?:[^\w\n]+[\w']+){0,2}\b/ 
const wordList = sample.split(re) 
console.log(wordList) 

Aber ich hab dies:

[ '', 
    ' ', 
    ' '] 

Warum ist das?

(Die Regel ist die Zeichenfolge alle N Worte aufzuspalten.)

+0

Wie lautet die Regel, um die Zeichenfolge zu teilen? –

+0

@ A.J Ich aktualisierte die Frage. – alex

+3

'.split()' enthält das Trennzeichen nicht, so dass es das Gegenteil von dem tut, was Sie wollen. Sie müssen eine reguläre Regex-Suche (mit einem 'g' Modifizierer) anstelle von Split durchführen. – JJJ

Antwort

9

String#split Die Methode, um die Zeichenfolge, die durch das angepaßte Inhalte aufgeteilt wird, damit es nicht die einstimmenden Zeichenkette im Ergebnisarray umfassen.

Verwenden Sie die String#match Methode mit einem globalen Flag (g) auf Ihrem regulären Ausdruck statt:

var sample="This is a test this is a test" 
 

 
const re = /\b[\w']+(?:\s+[\w']+){0,2}/g; 
 
const wordList = sample.match(re); 
 
console.log(wordList);

Regex explanation here.

4

Code ist gut zu gehen. aber nicht mit Split. Split behandelt es als Delimitor. zum Beispiel so etwas wie diese:

var arr = "1, 1, 1, 1"; 
arr.split(',') === [1, 1, 1, 1] ; 
//but 
arr.split(1) === [', ', ', ', ', ', ', ']; 

Statt match oder exec verwenden. wie diese

var x = "This is a test this is a test"; 
 
var re = /\b[\w']+(?:[^\w\n]+[\w']+){0,2}\b/g 
 
var y = x.match(re); 
 
console.log(y);

2

Als alternativer Ansatz können Sie Zeichenfolge, die von Raum und den merge Brocken im Batch aufgeteilt.

function splitByWordCount(str, count) { 
 
    var arr = str.split(' ') 
 
    var r = []; 
 
    while (arr.length) { 
 
    r.push(arr.splice(0, count).join(' ')) 
 
    } 
 
    return r; 
 
} 
 

 
var a = "This is a test this is a test"; 
 
console.log(splitByWordCount(a, 3)) 
 
console.log(splitByWordCount(a, 2))

0

Verwenden Leerzeichen Sonderzeichen (\s) und match Funktion statt split:

var wordList = sample.text().match(/\s?(?:\w+\s?){1,3}/g); 

Split bricht Zeichenfolge wo Regex-Übereinstimmungen. Match gibt zurück, was auch immer passend ist.

Überprüfen Sie diese fiddle.

2

Sie könnten so aufgeteilt:

var str = 'This is a test this is a test'; 
 
var wrd = str.split(/((?:\w+\s+){1,3})/); 
 
console.log(wrd);

Aber, müssen Sie leere Elemente aus dem Array löschen.

Verwandte Themen