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

Node.js中如何按数字拆分字符串同时保留数字?

在Node.js中按数字拆分字符串并保留数字的解决方案

这个问题我之前处理字符串的时候也碰到过!默认的split(/[0-9]/)确实会把用作分隔的数字丢掉,不过有两个实用的办法可以轻松解决这个需求:

方法一:利用split的捕获组保留分隔符

正则表达式里的捕获组(用括号包裹的部分)在split时会被保留到结果数组中,我们可以先把字符串拆分成字母、数字交替的数组,再将相邻的字母和数字合并:

const str = "shuan3jia4";
// 用捕获组匹配数字,拆分后数字会被保留在数组里
const splitParts = str.split(/([0-9])/);
// 过滤空元素,然后将字母和对应的数字合并
const mergedParts = splitParts
  .filter(part => part) // 去掉末尾可能出现的空字符串
  .reduce((result, current, index) => {
    if (index % 2 === 0) {
      // 偶数索引是字母部分,先加入数组
      result.push(current);
    } else {
      // 奇数索引是数字,和前一个字母部分合并
      result[result.length - 1] += current;
    }
    return result;
  }, []);
// 最后用空格连接成目标字符串
const finalResult = mergedParts.join(' ');
console.log(finalResult); // 输出:shuan3 jia4

方法二:用match直接匹配目标片段(更简洁)

如果你的需求是提取“字母+数字”的组合,直接用match匹配符合规则的片段会更高效:

const str = "shuan3jia4";
// 匹配一个或多个字母 + 一个数字的组合,全局搜索
const matchedParts = str.match(/[a-z]+[0-9]/gi);
// 用空格连接得到结果
const finalResult = matchedParts.join(' ');
console.log(finalResult); // 输出:shuan3 jia4

这里的正则/[a-z]+[0-9]/gi中:

  • [a-z]+:匹配一个或多个小写字母(如果需要支持大写可以保留i修饰符,不需要的话去掉i)
  • [0-9]:匹配紧跟在字母后的单个数字
  • g:全局搜索所有符合条件的片段

如果你的字符串里可能有多个连续数字(比如shuan34jia5),可以把[0-9]改成[0-9]+,这样就能匹配多个连续数字了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:28:10