括弧の間にある文字列を返す正規表現を書こうとしています。例:文字列「(」と「)」の間にある文字列を取得したい
I expect five hundred dollars ($500).
戻るだろう
$500
Javascriptで2つの文字列間の文字列を取得する正規表現が見つかりました
しかし、私は正規表現に不慣れです。正規表現で「(」、「)」を使用する方法がわかりません
var regExp = /\(\$([^)]+)\)/;
括弧の間にある文字列を返す正規表現を書こうとしています。例:文字列「(」と「)」の間にある文字列を取得したい
I expect five hundred dollars ($500).
戻るだろう
$500
Javascriptで2つの文字列間の文字列を取得する正規表現が見つかりました
しかし、私は正規表現に不慣れです。正規表現で「(」、「)」を使用する方法がわかりません
var regExp = /\(\$([^)]+)\)/;
回答:
エスケープされた(を使用した\
)括弧のセット(括弧と一致)と、キャプチャグループを作成する通常の括弧のグループを作成する必要があります。
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の視覚的な説明は次のとおりです
/g
フラグを使用すると、期待どおりに機能しません。
文字列操作を試してください:
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));
}
一時的なグローバル変数の使用を避けるために、関数型プログラミングスタイルへのMr_Greenの回答を移植しました。
var matches = string2.split('[')
.filter(function(v){ return v.indexOf(']') > -1})
.map( function(value) {
return value.split(']')[0]
})
シンプルなソリューション
注意:このソリューションは、この質問の文字列のように「(」と「)」が1つだけある文字列に使用できます。
("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();
通貨記号の後の数字のみの場合:機能する\(.+\s*\d+\s*\)
はずです
または\(.+\)
括弧内のものについて
)
が、文字列の後半に別のものが表示された場合I expect five hundred dollars ($500). (but I'm going to pay).
、貪欲さが+
より多くキャプチャされます。
($500)
、したいのですが: (but I'm going to pay)
一致しますが、1つの一致するアイテムと見なされるのではなく、2つの個別の一致ですか?前もって感謝します!
使用できる内側の括弧を除いて、括弧内の部分文字列を照合するには
\(([^()]*)\)
パターン。参照してください。正規表現のデモを。
JavaScriptでは、次のように使用します
var rx = /\(([^()]*)\)/g;
パターンの詳細
\(
- (
イワナ([^()]*)
-キャプチャグループ1:and 以外の0以上の文字に一致する否定された文字クラス(
)
\)
- )
イワナ。完全一致を取得するには、グループ0の値を取得します。括弧内のテキストが必要な場合は、グループ1の値を取得します。
最新のJavaScriptコードのデモ(を使用matchAll
):
const strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
const rx = /\(([^()]*)\)/g;
strs.forEach(x => {
const matches = [...x.matchAll(rx)];
console.log( Array.from(matches, m => m[0]) ); // All full match values
console.log( Array.from(matches, m => m[1]) ); // All Group 1 values
});
従来のJavaScriptコードのデモ(ES5準拠):
()
、並んでいる場合でもペアとそのコンテンツのみをキャプチャするため、優れてい()()
ます。
matchAll
ベースのJavaScriptコードのデモも追加しました。
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/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp