如何使用Javascript获取给定字符串中第n次出现的子字符串集?

如何使用Javascript获取给定字符串中第n次出现的子字符串集?,javascript,html,string,Javascript,Html,String,我有一根普通的绳子 "A <br> B <br/> C <br /> D <br/>" “ABCD” 和一组可能的子字符串,如 ['<br>','<br/>','<br />']; [''、''、''; 在字符串中某个特定字符串第n次出现的整个字符串中查找索引很简单,因此我可以在第n个“”或第n个“”的整个字符串中查找索引,但如何查找这些字符串中任何一个的第n次出现呢 例如,如果我需

我有一根普通的绳子

"A <br> B <br/> C <br /> D <br/>" 
“A
B
C
D
和一组可能的子字符串,如

['<br>','<br/>','<br />'];
['
'、'
'、'
';
在字符串中某个特定字符串第n次出现的整个字符串中查找索引很简单,因此我可以在第n个“

”或第n个“

”的整个字符串中查找索引,但如何查找这些字符串中任何一个的第n次出现呢

例如,如果我需要2'出现,在本例中是9'字符,即第一个

作为第一次出现,第二个

作为第二次出现

编辑:查找特定字符串第n次出现的索引可以这样做

var index = string.split('<br>', 2).join('<br>').length;
var index=string.split(“
”,2.join(“
”).length;

所以我可以找到不同的事件。问题是要找到这些字符串中任何一个的出现处。

您可以尝试使用如下正则表达式:

let testString=“A
B
C
D
”; //要搜索的子字符串数组 设testItems=['
'、'
'、'
'; //从给定数组构造正则表达式 设regex=newregexp(testItems.join(“|”)g); //获取所提供正则表达式的所有匹配项,并将其缩减为一个索引数组 让index=[…testString.matchAll(regex)].map(match=>match.index);
控制台日志(索引)递归解决方案在这里是有意义的,只要您不希望寻找第10000个匹配项或类似的匹配项。这里有一种方法:

const indexOfAny=(字符串、子字符串、pos=0)=>{
const positions=substring.map(ss=>string.indexOf(ss,pos))
.filter(n=>n>-1)
返回位置。长度==0?-1:Math.min(…位置)
}
const nthofay=(n,字符串,子字符串,pos=0)=>{
const first=indexOfAny(字符串、子字符串、位置)
返回n个任意(n,字符串,子字符串))

)
请说明您是否尝试过。任何人也尝试过提供输入和预期输出我现在已经用您的更新完成了
索引的结果
=31?因为我想没有第二次出现
了,因此它会以字符串结尾出现。如果您喜欢var index=string.split(“
”,2)。join(“
”).length;result将是26,这是第二个
的索引,它实际上在那里工作,但有一个相当严重的限制,即您不能在搜索词中使用正则表达式特殊字符。例如,搜索
'a
bcD'
['
','']
只产生
[2]
@ScottSauyet这是绝对正确的。感谢您指出!在加入条目之前可以很容易地解析条目。我假设当您通过
新的RegExp
时,它会自动转义所有内容。适用于
/
,因为它变成了
\/
。不要尝试任何其他特殊功能characters@AdityaMenon:Ivar所建议的只需
let regex=new RegExp(testItems.map(s=>s.replace(/[.*+\-?^${}()\[\]\\]/g,\\\$&')。join(“\\”,“g”)