【问题标题】:JavaScript indexOf from end of search string搜索字符串末尾的 JavaScript indexOf
【发布时间】:2025-11-22 01:35:02
【问题描述】:

Javascript 的 String.indexOf 返回字符串中搜索词的索引。

它从搜索字符串的开头返回第一次找到字符串的索引。示例:

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

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

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

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我用一个简单的函数对它进行了排序,但是写完之后,我只是觉得它很简单,很有用,我不明白为什么它还没有在 JavaScript 中实现!?

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

    会有想要的结果

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

    EDIT 也可能包含 lastIndexOf 实现

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

    【讨论】:

    • 这不是一个标准函数正是因为它如此微不足道!我从未在任何计算机语言的标准字符串处理库中见过这样的函数。
    • 这是一个公平的观点。但我认为它是 String 的一个有用的扩展。至少对于我当前的项目! :)
    • @Alnitak 如果您正在解析字符串,这很有用。
    【解决方案2】:
    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"); 
    

    【讨论】:

    • 我觉得我原来的建议更简洁。
    • @RoryPicko92 - 一种替代方案,这个不会污染字符串原型。取决于适合他们的 OP。
    • 为什么使用字符串原型是一件坏事,我认为它比杂散函数更简洁。另外我主要是指你给lastIndexOf打了两次电话。
    • 公平点双重调用,确实避免了临时 var 声明,我这样做的唯一原因,正如我所说,替代方案但两者都不正确。