web-dev-qa-db-ja.com

括弧内のものに一致する正規表現

これを機能させるのに苦労しています。私は次のような文字列を持っています:

_something/([0-9])/([a-z])
_

そして、括弧の間の各一致を取得し、次のような一致の配列を返す正規表現またはメソッドが必要です。

_[
  [0-9],
  [a-z]
]
_

私が使用している正規表現は/\((.+)\)/で、これは正しいものと一致しているようですifのみoneセットの括弧があります。

JavaScriptのRegExpメソッドを使用して上記のような配列を取得するにはどうすればよいですか?配列内のreturned項目がループしてURLルーティングスキームを作成するため、その配列だけを返す必要があります。

41
Oscar Godson

「?」を追加して、正規表現パターンを「貪欲でない」にする必要があります。 「。+」の後

デフォルトでは、「*」と「+」は貪欲であり、文字列内で発生する可能性のある一致を無視して、可能な限り文字列に一致します。

貪欲でない場合、パターンは最短一致にのみ一致します。

より良い説明については 貪欲に気をつけろ! を参照してください。

または、正規表現を

\(([^\)]+)\)

これは、括弧を含まない括弧のグループに一致します。

93
Rob Raisch

次の式を使用します。

/\(([^()]+)\)/g

例えば:

function()
{
    var mts = "something/([0-9])/([a-z])".match(/\(([^()]+)\)/g );
    alert(mts[0]);
    alert(mts[1]);
}
6
Chandu
var getMatchingGroups = function(s) {
  var r=/\((.*?)\)/g, a=[], m;
  while (m = r.exec(s)) {
    a.Push(m[1]);
  }
  return a;
};

getMatchingGroups("something/([0-9])/([a-z])"); // => ["[0-9]", "[a-z]"]
4
maerics

Sが文字列の場合:

s.replace(/^[^(]*\(/, "") // trim everything before first parenthesis
 .replace(/\)[^(]*$/, "") // trim everything after last parenthesis
 .split(/\)[^(]*\(/);      // split between parenthesis
4
arturh