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

需求:编写正则表达式去重、删数字括号并指定保留字符

解决方案:动态指定保留字符并完成去重与无关字符清理

核心思路

先过滤掉所有不属于指定保留集合的字符(包含数字、括号等),再对保留的字符去重,仅保留每个字符的首次出现。

分步实现

  1. 过滤非保留字符
    使用反向字符集正则匹配所有不在保留列表中的字符,全局替换为空。如果保留字符包含正则特殊字符(如^、-、]),需要先转义避免正则语法错误。

    const input = "{1}{G}{G}{U}{U}{W}";
    const keepChars = "GUW";
    // 正则特殊字符转义函数
    const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    const safeKeepChars = escapeRegExp(keepChars);
    
    // 过滤后得到仅含保留字符的字符串:"GGUUW"
    const filteredStr = input.replace(new RegExp(`[^${safeKeepChars}]`, 'g'), '');
    
  2. 去除重复字符
    用正向预查匹配后续仍会出现的重复字符,全局替换为空,仅保留首次出现的字符。

    // 去重后得到目标结果:"GUW"
    const finalResult = filteredStr.replace(/(.)(?=.*\1)/g, '');
    

合并简化版

将两步操作合并,减少中间变量:

const input = "{1}{G}{G}{U}{U}{W}";
const keepChars = "GUW";
const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

const result = input
  .replace(new RegExp(`[^${escapeRegExp(keepChars)}]`, 'g'), '')
  .replace(/(.)(?=.*\1)/g, '');

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

正则说明

  • [^${safeKeepChars}]:反向字符集,匹配所有不在保留字符列表中的内容,替换为空后彻底清除数字、括号等无关字符。
  • (.)(?=.*\1):(.)捕获单个字符,(?=.*\1)正向预查确保该字符在后续位置重复出现,替换这些重复的前置字符后,仅保留每个字符的第一次出现。

内容的提问来源于stack exchange,提问作者Howard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:30:58