0
array = ['item1', 'item2', 'item3', 'item4']
output = array.toString()

これは私を取得しますが、これをスペースと「および」で"item1,item2,item3,item4"変換する必要があります"item1, item2, item3, and item4"

部分文字列化と検索/置換ではなく、これを行う正規表現プロセスを構築するにはどうすればよいですか?

これが最善の方法ですか?

ありがとう!

4

3 に答える 3

4

これを試して:

var array = ['item1', 'item2', 'item3', 'item4'];
array.push('and ' + array.pop());
var output = array.join(', ');
// output = 'item1, item2, item3, and item4'

編集:正規表現ベースのソリューションが本当に必要な場合:

var output = array.join(',')
    .replace(/([^,]+),/g, '$1, ').replace(/, ([^,]+)$/, ' and $1');

別の編集:

array元の変数を台無しにしない別の非正規表現アプローチを次に示します。

var output = array.slice(0,-1).concat('and ' + array.slice(-1)).join(', ');
于 2012-05-17T17:42:09.380 に答える
1

このバージョンは、私が考えることができるすべてのバリエーションを処理します:

function makeList (a) {
  if (a.length < 2)
    return a[0] || '';

  if (a.length === 2)
    return a[0] + ' and ' + a[1];

  return a.slice (0, -1).join (', ') + ', and '  + a.slice (-1);
}    

console.log ([makeList ([]), 
              makeList (['One']), 
              makeList (['One', 'Two']), 
              makeList(['One', 'Two', 'Three']),
              makeList(['One', 'Two', 'Three', 'Four'])]);

// Displays : ["", "One", "One and Two", "One, Two, and Three", "One, Two, Three, and Four"]
于 2012-05-17T18:21:57.240 に答える
0
var output = array.join(", ");
output = outsput.substr(0, output.lastIndexOf(", ") + " and " + output.substr(output.lastIndexOf(" and "));
于 2012-05-17T17:39:50.400 に答える