在JavaScript中,我们假设有一个字符串:“敏捷的棕色狐狸跳过懒惰的狗”
然后我们有一个子字符串列表,比如:[“狗”、“棕色”、“那个”、“跳”]
如何过滤字符串中的每隔一个字符,而不是列表中给出的子字符串?
因此,本例中的结果应为:“棕色跳跃狗”
我想到的第一个解决方案是使用一个循环,并在每次迭代中使用RegExp,即:
const listOfSubstrings = ["dog", "brown", "The", "jumps"];
let theString = "The quick brown fox jumps over the lazy dog";
for (const substring of listOfSubstrings) {
theString = theString.replace(new RegExp(`[^${substring}]`, "g"), "");
}
然而,如果我们仔细查看(或测试)代码,我们会看到并理解循环后没有留下任何内容:在每次迭代中,列表中除了当前元素之外的所有元素都被移除,准确地说,在第二次迭代之后什么都不留下。
那么,对于给定的字符串和子字符串列表,你有什么想法可以实现我提供的最终结果吗?
3条答案
按热度按时间qvk1mo1f1#
您可以 match 这些子字符串并 join 所有匹配。
请参见pattern demo at regex101和下面提供的堆栈片段。
slmsl1lt2#
此解决方案按空格拆分输入,按感兴趣的单词过滤列表,然后将其连接回一个不含空格的字符串,以获得所需的结果:
输出:
lp0sw83n3#
你可以试试这个:
但是如果你的listOfSubstrings比较大的话,这个过程可能会比较慢。为此,你可以把你的listOfSubstrings转换成字典
使用字典的原因是检查键是否存在,工作时间为O(1),而数组. includes工作时间为O(n)。