簡體   English   中英

獲取字符串中第n個出現的索引

[英]Get the index of the nth occurrence in a string

我正在嘗試編寫一個函數,該函數從字符串中返回特定字符的特定位置的索引。 但是,我只能使它成功返回第一個或第二個索引。 我的功能如下:

function getIndex(str,char,n) {
    return str.indexOf(char, str.indexOf(char) + n-1);
}

輸入這些測試僅適用於前2個:

getIndex('https://www.example.example2.co.uk','.',2) // successfully returns 19
getIndex('https://www.example.example2.co.uk','.',1) // successfully returns 11
getIndex('https://www.example.example2.co.uk','.',3) // unsuccessfully returns 19

是否有人對這在兩個以上實例中的工作方式有任何想法? 我如何使用它的一個示例將得到以下內容:

var str = 'https://www.example.example2.co.uk';
str.substring(31); // returns .uk
str.substring(28, 31); // returns .co

感謝您的幫助。

在您的代碼中,您沒有指定第n次出現

str.indexOf(char, str.indexOf(char) + n-1);

在這里,您嘗試跳過str.indexOf(char) + n-1字符並繼續搜索嘗試此功能

function getIndex(str,char,n) {
    return str.split('')
            .map((ch,index)=>ch===char?index:-1)
            .filter(in=>in!=-1)[n-1];
}
  • 說字符串是Hello ,您正在尋找第二個

  • 將字符串拆分為字符[H,e,l,l,0]

  • 如果要查找的字符,則將它們映射到索引[-1,-1,2,3,-1]

  • 篩選所有-1 [2,3]

  • 使用n-1取2的第二個索引

您可以使用splitslicejoin來滿足您的需求。

邏輯

首先用char split字符串,然后使用slice將拆分值連接到nth次出現。 然后只需加入char 它的length將是您的答案。

檢查下面。

 function getIndex(str, char, n) { return str.split(char).slice(0, n).join(char).length; } console.log(getIndex('https://www.example.example2.co.uk', '.', 2)) // returns 19 console.log(getIndex('https://www.example.example2.co.uk', '.', 1)) // returns 11 console.log(getIndex('https://www.example.example2.co.uk', '.', 3)) // returns 28 

const search = '.';
const indexOfAll = (arr, val) => arr.reduce((acc, curr, i) => (curr === val ? [...acc, i] : acc), []);

indexOfAll(Array.from('https://www.example.example2.co.uk'), search);
=> [ 11, 19, 28, 31 ]
function findIndex(str, searchCharacter, n){
    var length = str.length, i= -1;
    while(n-- && i++<length ){
        i= str.indexOf(searchCharacter, i);
        if (i < 0) break;
    }
    return i;
}     

var index = findIndex('https://www.example.example2.co.uk','.',3);
console.log(index);
////
//  28
////

這是最快的解決方案

function getIndex(str, character, n) {
    return str.split(character, n).join(character).length;
}

var v1 = getIndex("https://www.example.example2.co.uk", ".", 1);
var v2 = getIndex("https://www.example.example2.co.uk", ".", 2);
var v3 = getIndex("https://www.example.example2.co.uk", ".", 3);
var v4 = getIndex("https://www.example.example2.co.uk", ".", 4);
var v5 = getIndex("https://www.example.example2.co.uk", ".", 5);

console.log(v1, v2, v3, v4, v5);

您還可以使用regex exec方法:

 function getIndex(str, find, occ) { var regex = new RegExp(`\\\\${find}`, 'g'); let arr, count = 0; while ((arr = regex.exec(str)) !== null) { if (++count == occ) return regex.lastIndex - 1; } } const a = getIndex('https://www.example.example2.co.uk','.',2); const b = getIndex('https://www.example.example2.co.uk','.',1); const c = getIndex('https://www.example.example2.co.uk','.',3); console.log(a, b, c); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM