获取拆分字符串数组的最后一个元素


182

我需要获取具有多个分隔符的拆分数组的最后一个元素。分隔符是逗号和空格。如果没有分隔符,则应返回原始字符串。

如果字符串是“今天你好吗?” 它应该返回“今天?”

如果输入为“ hello”,则输出应为“ hello”。

如何在JavaScript中执行此操作?

Answers:


120
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 2012年

50
@Jangla:没问题,因为数组是由split调用创建的,所以无论如何都不会保留。通过从数组中弹出项目,不会更改原始字符串。
Guffa

1
辉煌,一劳永逸,无需中介var即可设置阵列...不错
virtualeyes 2012年

@Guffa您知道我如何获得分裂的最后两个元素吗?
Vitor Guerreiro

2
@MarioLevrero:这是一个量词,与量词的含义相同{1,},即[, ]+匹配集合中的一个或多个字符(逗号和空格)。当您希望从字符串中获取所有单词时,此功能很有用,但是当您只希望最后一个单词没有任何功能上的区别时,由于数组中的字符串会更少,因此仅会减少开销。
Guffa

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

10
我不认为pop()接受参数。
Grace Shao


5
但是,一般来讲,它.split(',').pop()适用于逗号分隔字符串上的最后一个元素。只是说,因为我被Guffa出色的答案所误导,我只是不理会它,因为不需要正则表达式,并认为其中的窍门就在那里!:P
cregox

24

您还可以考虑反转数组并采用第一个元素。这样,您不必知道长度,但是它并没有带来真正的好处,也没有带来不利之处,即对于大数组,反向操作可能需要更长的时间:

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

虽然很简单,但是也可以修改原始数组。那可能是问题,也可能不是问题。

参考:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

也许您可能想使用它:

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

1
.pop()方法是到目前为止我所看到的最好的答案。这就是它被创建的原因!
尼古拉斯·波特

我强烈建议不要使用reverse(),因为在大型阵列上反转会很昂贵。如果您不关心突变,只需使用pop(),否则使用slice(-1)[0]。
wortwart

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
牛您好,欢迎来到!我认为这个答案没有考虑问题中要求的空格分隔符。
约翰·菲利普

1
该答案不支持任意字符串数组长度
Nima Soroush
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.