如何使用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
bc
D'
的['
','
']
只产生[2]
@ScottSauyet这是绝对正确的。感谢您指出!在加入条目之前可以很容易地解析条目。我假设当您通过新的RegExp
时,它会自动转义所有内容。适用于/
,因为它变成了\/
。不要尝试任何其他特殊功能characters@AdityaMenon:Ivar所建议的只需let regex=new RegExp(testItems.map(s=>s.replace(/[.*+\-?^${}()\[\]\\]/g,\\\$&')。join(“\\”,“g”)