2010-12-15 6 views
1

{token}の形式の文字列からトークンを抽出するために、C#で次の正規表現を作成しました。私はC#で正規表現を開発し、それが動作することを確認しました。 "{TOKEN1}" と "{token2}を" -JavaScript RegEx構文エラー

// c# 
var regex = new Regex(
    "\\{ (?>[^{}]+| \\{ (?<number>) | \\} (?<-number>))*(?(number)(?!))\\}", 
    RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | 
    RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); 

var matches = regex.Matches("blah {token1} blah blah blah {token2} blah"); 

変数matchesは2試合を含む終わります。

// JavaScript 
var regex = new RegExp("\\{ (?>[^{}]+| \\{ (?<number>) | \\} (?<-number>))*(?(number)(?!))\\}"); 

は私が間違っているのことを明らかに何かがあります...私はJavaScriptでこれを実行する必要がありますが、私は次の行を実行しようとしたとき、私は表現の構文エラーを取得しますか?
JavaScriptでサポートされていないRegEx機能を使用しようとしていますか?

答えて

4

あなたは「{何か}」のすべての出現箇所を一致させたい場合は試してみてください。

\{[^\}]*\} 

またはMetする必要がある別の条件はありますか? {token [0-9]}のように?

http://rubular.com/は、テストに役立ちます。

+0

追加要件はありません。それは実際に私のために働くようです。次の行は私に必要なマッチを与えます... text.match(/ \ {[^ \}] * \}/g);それは私が恐ろしくそれをovercomplicatedだったようだ。私は本当に正規表現のものと闘う。私はそれの周りに頭を持っている誰のために巨大な尊敬を持っています。どうもありがとう。 –

+0

あなたの歓迎、私は助けて嬉しいです! – morja

4

(?> ...)で修飾された独立した部分式は、Javascriptの正規表現ではサポートされていません。 ?は、実際には量子として評価されます。

+0

これはブラウザ固有のもので、実際には多かれ少なかれ拡張された種類の正規表現を認識するものもあります。 – sjngm

+0

私はそれがこのようなものになると考えました。情報をありがとう。それは、ドローボードに戻っているように聞こえる。 –

+0

はい。 '(?:...)を使ってキャプチャを抑制すると、例えば、動作します。 –

2

主なポイントは、C#(またはJava)を使用する場合、文字列を使用して正規表現を記述することです。そのような文字列では、すべてのエスケープ文字を再度エスケープする必要があります。そのため、 "{\"をエスケープする必要があります。しかし、JavaScriptはPerlやPHPに似た正規表現の独自の構文をサポートしています。

+0

これには複数の問題があります。誤ってエスケープ文字だけでなく、エンジンがサポートしていない正規表現機能を使用しています。私は大丈夫です! –

関連する問題