1

文字列を小さな文字列の配列に分割し、単語数で分割するメソッドが必要です。それは、私はそのような機能を探しています:

function cut(long_string, number_of_words) { ... }

var str = "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12";
var arr = cut(str, 3);

この場合、cut はそれぞれ 3 つの単語を含む 4 つの配列を返す必要があります。String.match() または String.split() の正規表現を見つけようとしましたが、その方法がわかりません..

4

3 に答える 3

2

最初にスペースで分割してから、配列をチャンクします。

function cut(input,words) {
    input = input.split(" ");
    var l = input.length, i, ret = [];
    for( i=0; i<l; i+=words) {
        ret.push(input.splice(0,words));
    }
    return ret;
}
于 2012-05-30T19:11:44.917 に答える
1

何かクレイジーなことをしましょう:

function cut(str, num){
    return str.match(new RegExp("(?:(?:^|\\s)\\S+){1," + num + "}", "g"));
}

これにより、実行ごとに新しい RegExp が作成され、文字列と一致します。速度に関してはもっと良い解決策があるかもしれませんが、これは素晴らしいMad Science(TM)です。しかも短い。

于 2012-05-30T19:27:22.447 に答える
1

配列をチャンクに分割する関数を作成します。

chunk = function(ary, len) {
    var i = 0, res = [];
    for (var i = 0; i < ary.length; i += len)
        res.push(ary.slice(i, i + len));
    return res;
}

この関数を単語のリストに適用します。

var str = "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11";
chunk(str.match(/\w+/g), 3)

str.match(/\w+/g)str.split(/\s+/)単語以外の文字をどのように処理するかによっても異なります。

部分文字列の配列のみを作成することに関心がある場合 (質問に記載されている単語の配列ではありません)、部分文字列に末尾のスペースを残さないソリューションを次に示します。

str.match(new RegExp("(\\S+\\s+){1," + (num - 1) + "}\\S+", "g"))

戻り値

["word1 word2 word3", "word4 word5 word6", "word7 word8 word9", "word10 word11 word12"]
于 2012-05-30T19:15:43.450 に答える