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

JavaScript与C#中Regex.Split(/\s*/)结果差异及C#中多余空字符串的消除方法

解决C# Regex.Split与JavaScript split的结果差异问题

这个差异其实是两种语言对匹配空字符串的正则拆分处理逻辑不同导致的:JavaScript的split方法会自动忽略拆分后产生的首尾空字符串,而C#的Regex.Split会完整保留所有拆分结果,包括这些零长度的空元素。

针对你的场景,有两种简单的解决方式:

方式一:过滤空字符串(最直观)

直接用LINQ过滤掉结果中的空字符串,完美复现JavaScript的行为:

using System.Linq;
using System.Text.RegularExpressions;

var password = "pass";
var arrPwd = Regex.Split(password, @"\s*")
                  .Where(s => !string.IsNullOrEmpty(s))
                  .ToArray();

执行后arrPwd就会得到和JS一致的["p", "a", "s", "s"],如果密码包含空白字符(比如"pa ss"),也能正确拆分并过滤空元素。

方式二:调整正则表达式(避免生成空字符串)

如果你不想额外做过滤,可以修改正则,让它只在非空白字符的边界处匹配,这样拆分时就不会产生首尾空字符串:

using System.Text.RegularExpressions;

var password = "pass";
var arrPwd = Regex.Split(password, @"(?<=\S)\s*|\s*(?=\S)");

这个正则的逻辑是:要么匹配非空白字符后面的零或多个空白,要么匹配非空白字符前面的零或多个空白,从根源上避免了首尾空元素的生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:38:15