web-dev-qa-db-ja.com

Javascriptで括弧内の文字列を取得するための正規表現

括弧で囲まれた文字列を返す正規表現を書き込もうとしています。たとえば、文字列 "("と ")"の間にある文字列を取得します。

I expect five hundred dollars ($500).

戻る

$500

Javascriptで2つの文字列の間の文字列を取得する 正規表現が見つかりました

しかし、私は正規表現が初めてです。正規表現で '('、 ')'を使う方法がわかりません

143
Okky

あなたは(括弧にマッチする)エスケープされた(\で)括弧のセットとあなたのキャプチャグループを作成する通常の括弧のグループを作成する必要があります:

var regExp = /\(([^)]+)\)/;
var matches = regExp.exec("I expect five hundred dollars ($500).");

//matches[1] contains the value between the parentheses
console.log(matches[1]);

壊す:

  • \(:左括弧に一致
  • (:グループのキャプチャを開始
  • [^)]+:1つ以上の)以外の文字と一致
  • ):グループのキャプチャを終了
  • \):閉じ括弧を一致させる

これは RegExplained に関する視覚的な説明です。

391
go-oleg

文字列操作を試してください。

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var newTxt = txt.split('(');
for (var i = 1; i < newTxt.length; i++) {
    console.log(newTxt[i].split(')')[0]);
}

または正規表現(、これはやや遅い 上記と比較して遅いです。

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var regExp = /\(([^)]+)\)/g;
var matches = txt.match(regExp);
for (var i = 0; i < matches.length; i++) {
    var str = matches[i];
    console.log(str.substring(1, str.length - 1));
}
28
Mr_Green

一時的なグローバル変数の使用を避けるために、 Mr_Green's answer を関数型プログラミングスタイルに移植しました。

var matches = string2.split('[')
  .filter(function(v){ return v.indexOf(']') > -1})
  .map( function(value) { 
    return value.split(']')[0]
  })
8
silkAdmin

単純解

注意:この問題では、この解決方法は文字列のように単一の "("と ")"しか持たない文字列に対して使用されます。

("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();

オンラインデモ(jsfiddle)

3
Ali Soltani

通貨記号の後の数字だけの場合:\(.+\s*\d+\s*\)は動作するはずです

かっこ内のものは\(.+\)

3
P0W

括弧の内側の部分文字列を内側の括弧を除いて一致させるには、次のようにします。

\(([^()]*)\)

パターン。 正規表現のデモ を参照してください。

JavaScriptでは、次のように使います。

var rx = /\(([^()]*)\)/g;

パターン詳細

  • \( - (文字
  • ([^()]*) - グループ1をキャプチャする:()以外の0以上の任意の文字に一致する 否定文字クラス
  • \) - )文字.

全体を一致させるには、Group 0の値を取得します。括弧内のテキストが必要な場合は、Group 1の値を取得します。

var strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
var rx = /\(([^()]*)\)/g;


for (var i=0;i<strs.length;i++) {
  console.log(strs[i]);

  // Grab Group 1 values:
  var res=[], m;
  while(m=rx.exec(strs[i])) {
    res.Push(m[1]);
  }
  console.log("Group 1: ", res);

  // Grab whole values
  console.log("Whole matches: ", strs[i].match(rx));
}
2
var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/;
alert(rex.exec(str));

$で始まり、その後に ')'が続く最初の数字と一致します。 ')'は試合には含まれません。コードは最初の一致で警告します。

var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/g;
var matches = str.match(rex);
for (var i = 0; i < matches.length; i++)
{
    alert(matches[i]);
}

このコードは、すべての一致について警告します。

参考文献:

"?= n"を検索します http://www.w3schools.com/jsref/jsref_obj_regexp.asp

「x(?= y)」を検索します https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp

0
AJ Dhaliwal