2016-11-26 11 views
6

私はこのターンしようとしている。この中分割n個の単語の配列に文字列

"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) 

しかし、私:私はこれを試してみました

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

得られた:

[ '', 
    ' ', 
    ' '] 

これはなぜですか?

(ルールは、ストリングごとNワードを分割することである。)

+0

文字列を分割するためのルールは何ですか? –

+0

@ A.J質問を更新しました。 – alex

+3

'.split()'には区切り文字が含まれていないため、必要なものとは逆の動作になります。 splitではなく正規表現の検索( 'g'修飾子付き)を行う必要があります。 – JJJ

答えて

9

それは結果の配列内の一致した文字列が含まれないようにString#split方法は、一致した内容で文字列を分割します。

ではなく、正規表現にグローバルフラグ( g)と String#matchメソッドを使用します。

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

コードが行ってもいいです。スプリットではできません。 splitは区切り文字として扱います。

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

代わりmatchまたはexecを使用します。このようなインスタンスの何かのため 。別のアプローチとして、この

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

のように、あなたは、バッチ内のスペースとマージチャンクで文字列を分割することができます。

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

使用空白の特殊文字(\s)、代わりにsplitmatch機能:

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

分割は、文字列の正規表現の一致を破ります。 Matchは一致したものを返します。

これをチェックするfiddleあなたは、配列から空の要素を削除する必要があり、

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

をしかし:

2

あなたはそのように分割することができます。

関連する問題