10

I'm trying to convert this long JS regex to C#.

The JS code below gives 29 items in an array starting from ["","常","","に","","最新","、","最高"...]

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[].

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.

What am I missing?

Pang
  • 9,564
  • 146
  • 81
  • 122
Youngjae
  • 24,352
  • 18
  • 113
  • 198

2 Answers2

15

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.). That's a Javascript syntax.

Actually the same applies to JavaScript when you use a string constructor like this:

var regex = new RegExp('//'); // This will match 2 slashes

Poul Bak
  • 10,450
  • 5
  • 32
  • 57
2

Here is a C# example code

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);