2011-07-13 54 views
0

這個JavaScript正則表達式的C#等價物是什麼?C#等價於JS RegEx表達式

str.replace(/(\w)\w*/g, "$1"); 

的Javascript輸入+結果(需要):

Input: I like pie! 
Result: i l p! 

C#+的輸入結果(使用Tim的版本貼在下面):

Input: I like pie! 
Result: \1 \1 \1! 

任何其他的想法?

+2

所以你要將你不明白的東西轉換成你不明白的新東西。如何學習正則表達式的東西呢? –

+1

即將到來的OP防禦:您需要相當多的關於不同的正則表達式的知識才能在諸如JS和.NET之類的大量不同的實現之間正確轉換它們。如果他剛剛將正則表達式複製到C#字符串中,結果會很微妙。 –

+0

實際上,那段代碼用一個字符替換了字符串中的每個單詞。我不確定它將如何轉換爲C#,因爲C#中的RegEx.Replace()會簡單地替換您輸入的任何匹配項。使用「$ 1」是JavaScript特定的。 –

回答

4
resultString = Regex.Replace(subjectString, "([A-Z0-9_])[A-Z0-9_]*", "$1", RegexOptions.IgnoreCase); 

這種變化是必要的,因爲\w匹配了很多比JavaScript的正則表達式更.NET正則表達式。

(除非你也想匹配包含非ASCII字母/數字的話,在這種情況下`@ 「(\ W)\ W *」 會更好。)

+0

正如我的文章所編輯的,上面給出了結果:\ 1 \ 1 \ 1! –

+0

在上面的代碼片段中用@「$ 1」替換@「\ 1」。 –

+0

@Mr。史密斯:對,對不起。感謝您的提醒! –

1
var result = Regex.Replace(input, @"(?<x>\w)\w*", @"${x}");