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

如何编写正则表达式,按指定字符集外的内容分割字符串?

解决字符串分割的正则表达式问题

看起来你写的正则有两个关键问题,导致没得到预期结果:

  1. 错误使用了^锚点:这个符号会强制正则只匹配字符串的开头,根本没法捕捉到中间的分隔符(比如输入里的%);
  2. 正则逻辑搞反了:你写的[\d\,\\\/\+\(\)]是匹配你想要保留的字符,但split是用匹配到的内容作为分隔符,这完全和你的需求相反。

结合你的示例输入和期望输出,我先明确实际需求:你想要把字符串分割成三部分——连续的字母+空格(比如hi my 、num is)、包含数字、+、/、(、)、逗号和空格的内容(比如+91 67 (987)92471/72,73),而像%这类不属于上述两类的字符,要作为分隔符。

正确的正则表达式实现

这里提供两种能达到你期望效果的实现方式:

方式1:一步到位的split正则

用正向断言匹配两类分隔符,一次性完成分割:

const input = "hi my% num is +91 67 (987)92471/72,73";
const result = input.split(/[^a-zA-Z\s\d\+\\\/\(\),]|(?<=[a-zA-Z])\s+(?=[\+\d])/).filter(Boolean);
console.log(result); // ["hi my ", "num is", "+91 67 (987)92471/72,73"]

方式2:分步处理(更易理解)

先把特殊分隔符替换成统一标记,再分割字母块和符号数字块:

const input = "hi my% num is +91 67 (987)92471/72,73";
// 第一步:把所有非允许字符替换成统一分隔符
const cleaned = input.replace(/[^a-zA-Z\s\d\+\\\/\(\),]/g, '|');
// 第二步:分割字母块和符号数字块,同时清理空内容
const result = cleaned.split(/(?<=[a-zA-Z])\s+(?=[\+\d])/).map(part => part.split('|').filter(Boolean).join(' '));
console.log(result); // ["hi my ", "num is", "+91 67 (987)92471/72,73"]

正则规则解释

  • [^a-zA-Z\s\d\+\\\/\(\),]:匹配所有不是字母、空格、数字、+、/、\、(、)、逗号的字符(比如输入里的%),作为第一类分隔符;
  • (?<=[a-zA-Z])\s+(?=[\+\d]):正向断言,匹配“字母后面跟着的、且后面是+或数字的空格”,作为第二类分隔符,用来分割字母块和符号数字块;
  • .filter(Boolean):过滤split后产生的空字符串(比如分隔符在开头/结尾的情况)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:03:56