我正在尝试编写一个函数,该函数从字符串中返回特定字符的特定位置的索引。但是,我只能使它成功返回第一个或第二个索引。我的功能如下:
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
感谢您的帮助。
答案 0 :(得分:2)
在您的代码中,您没有指定第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
,您正在寻找第二个l
将字符串拆分为字符[H,e,l,l,0]
如果要查找的字符,则将它们映射到索引 [-1,-1,2,3,-1]
过滤所有-1 [2,3]
使用n-1(即3)获取第二个索引
答案 1 :(得分:2)
您可以使用split
,slice
和join
来满足您的要求。
逻辑
首先用split
char
字符串,然后使用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
答案 2 :(得分:2)
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 ]
答案 3 :(得分:2)
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
////
答案 4 :(得分:1)
这是最快的解决方案
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);
答案 5 :(得分:1)
您还可以使用正则表达式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);