JS获取倒数第二个索引位置

27

我正在尝试找出如何获取字符串中某个字符的倒数第二个索引。

例如,我有一个字符串,像这样:

http://www.example.com/website/projects/2

目前我使用以下代码获取数字2:

$(location).attr('href').substring($(location).attr('href').lastIndexOf('/')+1);

但如果我想要获取单词projects呢?

有没有人可以帮助我解决这个问题?提前感谢!


2
我不怎么做JS,但我会在“/”处分割字符串,并获取数组中倒数第二个条目。 - Borgleader
7
str.lastIndexOf('/', str.lastIndexOf('/')) 的含义是在字符串 str 中查找最后一个斜杠的位置,并返回该斜杠前面的字符所在的位置。具体用法请参考文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf - Felix Kling
2个回答

34
你可以使用 split 方法:
var url = $(location).attr('href').split( '/' );
console.log( url[ url.length - 1 ] ); // 2
console.log( url[ url.length - 2 ] ); // projects
// etc.

1
你可能需要先进行一次检查。 - Amine Hajyoussef

31

不使用split函数,且只用一行代码获取倒数第二个索引:

var secondLastIndex = url.lastIndexOf('/', url.lastIndexOf('/')-1)

这个模式可以用来更进一步:

var thirdLastIndex = url.lastIndexOf('/', (url.lastIndexOf('/', url.lastIndexOf('/')-1) -1))

感谢 @Felix Kling。

一个实用函数:

String.prototype.nthLastIndexOf = function(searchString, n){
    var url = this;
    if(url === null) {
        return -1;
    }
    if(!n || isNaN(n) || n <= 1){
        return url.lastIndexOf(searchString);
    }
    n--;
    return url.lastIndexOf(searchString, url.nthLastIndexOf(searchString, n) - 1);
}

可以像 lastIndexOf 一样使用:

url.nthLastIndexOf('/', 2); //2nd last index
url.nthLastIndexOf('/', 3); //3rd last index
url.nthLastIndexOf('/'); //last index

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接