私が行った場合:
"A first sentence. A second sentence".match(/A\s([^\s]*)\ssentence/g)
これは次を返します:
["A first sentence", "A second sentence"]
そして、私が使用する場合:
RegExp.$1
次に、最後の最初の括弧のキャプチャを取得するだけなので、"second".
配列を取得したいと思い["first","second"]ます。出来ますか?
私が行った場合:
"A first sentence. A second sentence".match(/A\s([^\s]*)\ssentence/g)
これは次を返します:
["A first sentence", "A second sentence"]
そして、私が使用する場合:
RegExp.$1
次に、最後の最初の括弧のキャプチャを取得するだけなので、"second".
配列を取得したいと思い["first","second"]ます。出来ますか?
ループで実行し、コレクションを構築する必要があります。
var str = "A first sentence. A second sentence",
regex = /A\s([^\s]*)\ssentence/g,
result = [],
match;
while (match = regex.exec(str)) {
result.push(match[1]);
}
console.log(result);
正規表現はgグローバルであるため、最後の一致の位置を記憶し、次に正規表現が使用されるときにそこから開始します。そのため、一致が見つからなくなるまでループが続きます。
ループ内では、サブグループをresult配列に追加するだけです。
.replaceこの目的のために使用するのが好きな人もいます。
var str = "A first sentence. A second sentence",
regex = /A\s([^\s]*)\ssentence/g,
result = [];
str.replace(regex, function(str, g1) {
result.push(g1);
});
console.log(result);
実際には文字列の置換を行っているわけではなく、一致が見つからなくなるまで検索を繰り返すという事実を利用しているだけです。
簡単にするために、次のように定義します
function runRegex(str, pat, ret){
return str.match(pat).map(function(a){
a.match(pat); var b; eval("with(RegExp) b = " + ret + ";"); return b;
});
}
必要なパラメータで使用します
runRegex("A first sentence. A second sentence", /A\s([^\s]*)\ssentence/g, "$1");
このデモを確認してください。
このソリューションの利点は、次のような複雑な戻り式を使用できることです。
runRegex("A first sentence. A second sentence", /A\s([^\s]*)(\ssentence)/g, "$1+$2"));
gサブパターンを取得するには、修飾子なしで正規表現を再実行する必要があります。何かのようなもの:
"A first sentence. A second sentence".match(/A\s([^\s]*)\ssentence/g)
.map(function(a) {return a.match(/A\s([^\s]*)\ssentence/);})
(が存在するかシムされていると仮定Array.prototype.mapします - それ以外の場合はループを使用します)