web-dev-qa-db-ja.com

分割された文字列配列の最後の要素を取得する

複数のセパレーターを持つ分割配列の最後の要素を取得する必要があります。区切り文字はコンマとスペースです。セパレータがない場合は、元の文字列を返す必要があります。

文字列が「今日、お元気ですか?」 「今日?」を返すはずです

入力が「hello」の場合、出力は「hello」になります。

JavaScriptでこれを行うにはどうすればよいですか?

148
sol
var str = "hello,how,are,you,today?";
var pieces = str.split(/[\s,]+/);

この時点で、piecesは配列であり、pieces.lengthには配列のサイズが含まれているため、配列の最後の要素を取得するには、pieces[pieces.length-1]をチェックします。コンマまたはスペースがない場合は、指定されたとおりに文字列を出力します。

alert(pieces[pieces.length-1]); // alerts "today?"
98

すべてにワンライナーがあります。 :)

var output = input.split(/[, ]+/).pop();
680
Guffa
var item = "one,two";
var lastItem = item.split(",").pop(-1);

これは機能しませんか?

43
mohawke

配列を逆にして最初の要素を取得することも検討できます。この方法では、長さを知る必要はありませんが、大きな配列では逆の操作に時間がかかるという本当の利点と欠点はありません。

array1.split(",").reverse()[0]

簡単ですが、問題の元の配列も変更します。それは問題かもしれませんし、そうでないかもしれません。

リファレンス: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

おそらくあなたはこれを使用したいかもしれません:

array1.split(",").pop()
8
Smile4ever
array.split(' ').slice(-1)[0]

これまでで最高のものと私のお気に入り。

3
jithil

そして、配列を構築したくない場合は...

var str = "how,are you doing, today?";
var res = str.replace(/(.*)([, ])([^, ]*$)/,"$3");

英語の内訳は次のとおりです。

/(anything)(any separator once)(anything that isn't a separator 0 or more times)/

置換では、文字列全体を最後の区切り文字の後のもので置き換えるだけです。

したがって、これが一般的にどのように適用されるかを見ることができます。元の文字列は変更されないことに注意してください。

3
Tony

配列インデックスに直接アクセスできます。

var csv = 'zero,one,two,three'; csv.split(',')[0]; //result: zero csv.split(',')[3]; //result: three

1
tnong
var title = 'fdfdsg dsgdfh dgdh dsgdh tyu hjuk yjuk uyk hjg fhjg hjj tytutdfsf sdgsdg dsfsdgvf dfgfdhdn dfgilkj,n, jhk jsu wheiu sjldsf dfdsf hfdkdjf dfhdfkd hsfd ,dsfk dfjdf ,yier djsgyi kds';
var shortText = $.trim(title).substring(1000, 150).split(" ").slice(0, -1).join(" ") + "...More >>";
0
user7425063