正则表达式 String.split(/\s*/) 在 JavaScript 和 C# 中给出不同的结果

Regex String.split(/\s*/) gives different results in JavaScript and C#

我在 JS 中有一个正则表达式,它在 C# 中不会产生相同的结果:

//javascript
var password = "pass";
var arrPws = password.split(/\s*/);

给我一个 String[] 结果,如 following


但是当我尝试在 C# 中重现它时,我得到的输出略有不同:
//c#
using System.Text.RegularExpressions;

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

C# 代码在开头和结尾添加了一个额外的“”,如 following
C#中如何去掉多余的""?

为了快速修复 .NET 代码,您可以拆分 (?<=.)\s*(?=.):

using System.Text.RegularExpressions;

var password = "pass";
var arrPwd = Regex.Split(password,@"(?<=.)\s*(?=.)");
foreach(var item in arrPwd)
{
    Console.WriteLine(item.ToString());
}

这会打印:

p
a
s
s

您看到的问题与 \s* 的行为有关。在 .NET 的正则表达式引擎上,\s* 匹配输入开始和结尾的零宽度标记,但在 JavaScript 的引擎中不匹配。

如果您只需要字符串中所有字符的数组,请使用 string#ToCharArray()