正则表达式 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()
。
我在 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()
。