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


183

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

文字列が「今日、どのようにしていますか?」ですか。「今日?」

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

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

回答:


122
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?"

55
を使用pieces.pop()して、配列の最後の項目を取得することもできます。
トレント

4
これを使用して、変数を保存せずにstr.split()を参照する方法はありますか?
Tanner

1
var last = str.split(/[\s,]+/).pop()
zanderwar

788

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

var output = input.split(/[, ]+/).pop();

6
ここでの問題は、pop()もその要素を配列から削除し、それによって要素を変更することです。
slashwhatever

50
@Jangla:配列はsplit呼び出しによって作成されるため、それは問題ではありません。とにかく保持されません。元の文字列は、配列からアイテムをポップしても変更されません。
Guffa

1
見事な、すべて一度に、アレイをセットアップするための中間
変数

@Guffa分割の最後の2つの要素を取得する方法を知っていますか?
Vitor Guerreiro

2
@MarioLevrero:これは、量指定子と同じ意味の量指定子です{1,}。つまり[, ]+、セット内の1つ以上の文字(カンマとスペース)に一致します。文字列からすべての単語が必要な場合に便利ですが、最後の単語だけが必要な場合は機能的な違いはなく、配列内の文字列が少なくなるためオーバーヘッドが削減されるだけです。
Guffa

56
var item = "one,two,three";
var lastItem = item.split(",").pop();
console.log(lastItem); // three

10
pop()は引数をとらないと思います。
Grace Shao


5
ただし、一般的に言えば.split(',').pop()、カンマ区切りの文字列の最後の要素に対して機能します。私はグッファの素晴らしい答えに惑わされました、正規表現を必要とせず、トリックがそこにあると思ったので無視しました!:P
cregox

25

配列を逆にして最初の要素を取ることも検討できます。そうすれば、長さを知る必要はありませんが、大きな配列では逆の操作に時間がかかるという実際のメリットとデメリットはありません。

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

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

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

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

array1.split(",").pop()

1
この.pop()方法は、これまで見た中で最良の答えです。それが作成された理由です!
Nicholas Porter

大規模な配列では逆転にコストがかかるため、reverse()は使用しないことを強くお勧めします。変異を気にしない場合は、pop()を使用します。それ以外の場合は、slice(-1)[0]を使用します。
ワートワート

13
array.split(' ').slice(-1)[0]

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


もちろんです。元の+1は変更されないため、これは素晴らしい回答です
jhamPac

3

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

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

置換は、文字列全体を最後のセパレータの後のもので置換することを示しています。

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


0
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

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

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


3
こんにちは、SOへようこそ!この回答では、質問で要求されているスペース区切りは考慮されていません。
John-Philip、

1
この回答は、任意の文字列配列の長さをサポートしていません
Nima Soroush
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.