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

JavaScript如何将字符串按指定分隔符分割且保留分隔符到数组中

实现自定义分割函数

该函数和JS原生split方法的核心差异是会保留分隔符作为结果数组的独立元素,完全匹配你给出的用例要求。

完整实现代码

function mySplitFunction(str, sep) {
  // 转义分隔符中的正则特殊字符,避免匹配异常
  const escapeRegExp = (string) => string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

  // 边界处理:分隔符为空时直接返回原字符串组成的数组
  if (sep === '') return [str];

  const separatorReg = new RegExp(`(${escapeRegExp(sep)})`, 'g');
  const result = [];
  let lastMatchEnd = 0;
  let matchResult;

  // 遍历所有匹配到的分隔符
  while ((matchResult = separatorReg.exec(str)) !== null) {
    // 把两个分隔符中间的非分隔符内容加入结果
    if (matchResult.index > lastMatchEnd) {
      result.push(str.slice(lastMatchEnd, matchResult.index));
    }
    // 把匹配到的分隔符作为独立项加入结果
    result.push(matchResult[0]);
    lastMatchEnd = separatorReg.lastIndex;
  }

  // 把最后一段分隔符之后的剩余内容加入结果
  if (lastMatchEnd < str.length) {
    result.push(str.slice(lastMatchEnd));
  }

  return result;
}

用例测试

const str1 = 'aabbcc';
const str2 = 'aabbccaaddaaaaeeff';

console.log(mySplitFunction(str1, 'aa')); // 返回 ['aa','bbcc']
console.log(mySplitFunction(str1, 'bb')); // 返回 ['aa','bb', 'cc']
console.log(mySplitFunction(str2, 'aa')); // 返回 ['aa','bbcc', 'aa','dd', 'aa','aa', 'eeff']
console.log(mySplitFunction(str2, 'dd')); // 返回 ['aabbccaa','dd', 'aaaaeeff']

实现逻辑说明

  1. 先对传入的分隔符做正则特殊字符转义,避免.、*、+这类正则关键字导致匹配逻辑错误
  2. 构造带分组的全局正则匹配所有分隔符位置
  3. 遍历匹配结果,依次将匹配间隔的非分隔符内容、匹配到的分隔符插入结果数组
  4. 遍历结束后补全最后一段剩余的非分隔符内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:54:03