JavaScript indexOf从搜索字符串的末尾开始搜索

11

Javascript的String.indexOf方法返回一个字符串中搜索项的索引。

它返回第一次发现匹配字符的位置(从搜索字符串的开头开始)。例如:

'abcdefghijklmnopqrstuvwxyz'.indexOf('def') = 3;

但是我需要从搜索结果的末尾获取它,例如:

'abcdefghijklmnopqrstuvwxyz'.indexOf('def') = 6; //essentially index + searchString.length

这样我就可以从返回值中使用String.substr来获取该点之后的字符串。

2个回答

17

我用一个简单的函数进行了排序,但在写完后,我觉得它如此简单和有用,以至于我无法理解为什么它还没有被实现到JavaScript中!

String.prototype.indexOfEnd = function(string) {
    var io = this.indexOf(string);
    return io == -1 ? -1 : io + string.length;
}

这将会产生预期的结果

'abcdefghijklmnopqrstuvwxyz'.indexOfEnd('def'); //6

编辑时可以把 lastIndexOf 实现一起包含进来。

String.prototype.lastIndexOfEnd = function(string) {
    var io = this.lastIndexOf(string);
    return io == -1 ? -1 : io + string.length;
}

它不是一种标准函数,恰恰因为它如此微不足道!我从来没有在任何计算机语言的标准字符串处理库中看到过这样的函数。 - Alnitak
这是一个公正的观点。但我认为它是String的一个有用扩展。至少对于我的当前项目来说是这样的! :) - rorypicko
@Alnitak 如果你正在解析字符串,这很有用。 - Travis Heeter

1
var findStr = "def";
var searchString = 'abcdefghijklmnopqrstuvwxyz';
var endOf = -1;
endOf = searchString.lastIndexOf(findStr) > 0 ? searchString.lastIndexOf(findStr) + findStr.length : endOf;
alert(endOf);

如果找不到,警报将显示-1。

如果您有这个字符串,则注意返回23:

var searchString = 'abcdefghijklmnopqrstdefuvwxyz';

作为一个函数:
function endofstring (searchStr,findStr){
    return searchStr.lastIndexOf(findStr) > 0 ? searchStr.lastIndexOf(findStr) + findStr.length : -1;
}

endofstring(searchString,"def"); 

我认为我的原始建议更加简洁。 - rorypicko
@RoryPicko92 - 这是一个替代方案,它不污染字符串原型。由OP决定哪个适合他们。 - Mark Schultheiss
为什么使用字符串原型是不好的呢?我认为这比有散函数更整洁。另外,我主要是指你两次调用lastIndexOf - rorypicko
公平点,双重调用确实避免了中间的 var 声明,我之所以这样做,就像我说的,有替代方案,但都不是错误的。 - Mark Schultheiss

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