[英]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的第二个索引
您可以使用split
, slice
和join
来满足您的需求。
逻辑
首先用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.