0

私はこの正規表現を持っています

var mregex = /(\$m[\w|\.]+)/g;
string mstring= "$m.x = $m.y";

したがって、基本的に$m。[+任意の数の英数字または。の各インスタンスをキャプチャします。別のキャラクターまたは最後まで]

私はこれをC#で動作させていますが、JavaScriptに移植しようとしているので、名前のキャプチャを削除しました。

var match = mregexp.exec(mstring);

match has 0: "$ mx" 1: "$mx"//予想どおり$myではありません。

私は何が間違っているのですか?

ありがとう

4

3 に答える 3

3

正規表現は1回だけ一致します。戻り配列の[0]要素は、一致した部分文字列全体です。[1]要素は最初のグループであり、あなたの場合は同じです。.exec()2番目のインスタンスを見つけるには、もう一度呼び出す必要があります。

に関数を渡すことができます.replace()。これは私が個人的に気に入っているものです。

mstring.replace(mregexp, function(_, group) {
  console.log( group );
});

これにより、一致した両方のグループが表示されます。(関数には、から返された配列の要素と同じ性質の引数が渡されます.exec()。)

于 2012-07-31T23:20:51.783 に答える
0

mregexp.exec()が返されるまで繰り返す必要がありますnull

var match = []; //initialize a new array
while(mregexp.exec(mstring)){
    match.push(mregexp[1]);
}

Javascriptの正規表現のフレーバーについては、http://www.regular-expressions.info/javascript.htmlを参照してください。

于 2012-07-31T23:24:07.633 に答える
0

呼び出しmstring.match(mregexp)てすべての一致を返すことができますが、一致したサブ文字列のみが表示されます(この場合、に簡略化できますmregexp/\$m[\w.]+/g

于 2012-07-31T23:24:09.007 に答える