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

JavaScript字符串简化函数优化:保留指定特殊符号

解决方案

要实现保留指定符号的字符串简化,核心是优先匹配并保留长符号,避免短符号拆分长符号(比如...不能被拆成三个.),再对其余无关内容进行处理。具体实现如下:

实现思路

  1. 排序符号数组:将符号按长度从长到短排序,确保长符号先被匹配(比如!!、...这类多字符符号优先于单个!、.)。
  2. 构建安全正则:转义符号中的正则特殊字符,避免解析错误;用捕获组区分「保留符号」和「其他字符」。
  3. 分场景处理:匹配到保留符号直接保留,其余非目标字符(字母、数字、'、_)替换为空格,最后统一转小写并清理多余空格。

完整代码

const signs = ['!!', '?!', '!?', '...', '..', '.', '?', '؟!', '!؟', '!', '؟', ':'];

// 按符号长度降序排序,确保长符号优先被匹配
const sortedSigns = [...signs].sort((a, b) => b.length - a.length);

// 转义正则特殊字符,避免符号中的.、?等干扰正则解析
const escapedSigns = sortedSigns.map(sign => sign.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
// 构建正则:要么匹配保留符号,要么匹配非目标字符
const signRegex = new RegExp(`(${escapedSigns.join('|')})|[^A-Za-z0-9'_]`, 'g');

function simplify(string) {
  return string
    .toLowerCase()
    .replace(signRegex, (match, capturedSign) => {
      // 匹配到保留符号则直接返回,否则替换为空格
      return capturedSign ? capturedSign : ' ';
    })
    .replace(/\s+/g, ' ') // 合并连续的多余空格
    .trim(); // 清理首尾空格
}

// 测试示例
console.log(simplify('   The     very optiMal! FUNCTION, {here] ...'));
// 输出:"the very optimal! function here ..."
console.log(simplify('Hello?! World.. How are you؟!'));
// 输出:"hello?! world.. how are you؟!"

关键细节说明

  • 符号排序:比如...会比.先被匹配,避免长符号被拆成单个字符处理后丢失原有格式。
  • 正则转义:像.、?这类在正则中有特殊含义的符号,必须转义后才能作为普通字符匹配。
  • 空格清理:最后用/\s+/g合并连续空格,保证处理后的字符串格式整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:20:41