2016-11-26 31 views
6

Bunu açmaya çalışıyorum: bu işeBölme n kelimelerin bir diziye bir dize

"This is a test this is a test" 

:

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

Ama ben: Bu çalıştı

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

[ '', 
    ' ', 
    ' '] 
: Bu got Bu neden

mı?

(kural dize her N kelime bölmektir.) Bu sonuç dizi içinde eşleşen dizge dahil olmayacak şekilde

+0

Dizgiyi bölmek için izlenmesi gereken kural nedir? –

+0

@ A.J Soruyu güncelledim. – alex

+3

'.split()' sınırlayıcıyı içermez, böylece istediğiniz şeyin tam tersini yapar. Bölünme yerine düzenli bir düzenli arama ("g" değiştirici ile) yapmanız gerekir. – JJJ

cevap

9

String#split yöntem, denk eşleştirilen içerik dize bölünmüş olacaktır.

yerine normal ifadede ilgili küresel bayrağı ( g) ile String#match yöntemi kullanın:

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

kodunuzu gitmek iyidir. ama bölünmüş değil. bölünmüş bir sınırlayıcı olarak ele alacaktır. Böyle mesela şey:

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

yerine match veya exec kullanın. Alternatif bir yaklaşım olarak bu

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

gibi, bu alan ve toplu birleştirme parçaları ile dize ayırabilirsiniz.

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

kullanın boşluk özel karakter (\s) ve bunun yerine split ait match fonksiyonu:

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

Bölünmüş dize regex eşleşmeleri kırar. Eşleşme, eşleşen her şeyi döndürür.

kontrol bu fiddle. Eğer diziden boş unsurları silmek zorunda,

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

Ama:

2

Böyle bölünmüş.

İlgili konular