简体   繁体   English

C#Regex.Split的工作方式与JavaScript不同

[英]C# Regex.Split is working differently than JavaScript

I'm trying to convert this long JS regex to C#. 我正在尝试将这个长JS正则表达式转换为C#。

The JS code below gives 29 items in an array starting from ["","常","","に","","最新","、","最高"...] 下面的JS代码给出了从["","常","","に","","最新","、","最高"...]开始的数组中的29个项目

var keywords = /(\ |[a-zA-Z0-9]+\.[a-z]{2,}|[一-龠々〆ヵヶゝ]+|[ぁ-んゝ]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+)/g;
var source = '常に最新、最高のモバイル。Androidを開発した同じチームから。';
var result = source.split(keywords);

But the C# code below gives a non-splitted single item in string[] . 但是下面的C#代码给出 string[] 的非拆分单项

var keywords = @"/(\ |[a-zA-Z0-9]+\.[a-z]{2,}|[一-龠々〆ヵヶゝ]+|[ぁ-んゝ]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+)/g";
var source = @"常に最新、最高のモバイル。Androidを開発した同じチームから。";
var result = Regex.Split(source, keywords);

Many questions in Stack Overflow are covering relatively simple expressions only, so I cannot find my mistakes. Stack Overflow中的许多问题仅涵盖相对简单的表达式,因此我无法找到错误。

What am I missing? 我错过了什么?

Your RegEx is wrong, you should not start and end with '/' or '/g' You specify a string in the constructor, not a JavaScript Regex (with '/ /' syntax.). 你的RegEx是错误的,你不应该以'/''/g'开头和结尾你在构造函数中指定一个字符串,而不是JavaScript Regex(带有'/ /'语法。)。 That's a Javascript syntax. 这是一个Javascript语法。

Actually the same applies to JavaScript when you use a string constructor like this: 实际上,当您使用这样的字符串构造函数时,同样适用于JavaScript:

var regex = new RegExp('//'); // This will match 2 slashes //这将匹配2个斜杠

Here is a C# example code 这是一个C#示例代码

string keywords = @"(\ |[a-zA-Z0-9]+\.[a-z]{2,}|[一-龠々〆ヵヶゝ]+|[ぁ-んゝ]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+)";
string source = @"常に最新、最高のモバイル。Androidを開発した同じチームから。";
string [] res = Regex.Split(source, keywords);

string single = "";
foreach ( string str in res )
    single += "'" + str + "',";
Console.WriteLine("{0}", single);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM