You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中保留指定子串列表并移除字符串其余字符?

解决JavaScript保留指定子串的问题

你的原代码逻辑存在致命问题:每次循环都会把当前字符串里除了当前子串包含的字符全部删除。比如第一次处理"The"后,字符串只剩"The";下一次处理"brown"时,"The"里的字符都不在"brown"中,直接被清空,最终自然没有内容留存。

下面给出两种可行的解决方案:

解法1:正则匹配所有目标子串后拼接

核心思路是把要保留的子串组合成正则表达式,一次性匹配原字符串中所有符合要求的子串,再将结果拼接起来。注意要转义子串中的正则特殊字符(比如.、*),避免匹配异常。

const listOfSubstrings = ["dog", "brown", "The", "jumps"];
const theString = "The quick brown fox jumps over the lazy dog";

// 转义正则特殊字符
const escapedSubstrings = listOfSubstrings.map(str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
// 构建匹配任意目标子串的全局正则
const matchRegex = new RegExp(`(${escapedSubstrings.join('|')})`, 'g');
// 匹配所有结果并拼接,无匹配时兜底空字符串
const result = (theString.match(matchRegex) || []).join('');

console.log(result); // 输出:Thebrownjumpsdog

解法2:遍历子串逐个提取累加

如果不想用复杂正则,也可以遍历每个目标子串,在原字符串中提取所有出现的该子串,逐步累加结果:

const listOfSubstrings = ["dog", "brown", "The", "jumps"];
const theString = "The quick brown fox jumps over the lazy dog";

let result = '';
for (const substr of listOfSubstrings) {
    // 转义特殊字符后匹配当前子串的所有实例
    const matches = theString.match(new RegExp(substr.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'));
    if (matches) {
        result += matches.join('');
    }
}

console.log(result); // 输出:Thebrownjumpsdog

两种方法都能实现需求,第一种更简洁高效;如果原字符串中存在目标子串的重复实例,两种方法都会保留所有出现的内容。

内容的提问来源于stack exchange,提问作者Aku-Ville Lehtimäki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:05:25