54

更新:この質問はこれとほぼ重複しています

私の質問に対する答えはそこにあると確信していますが、それを簡潔に表現する言葉が見つかりませんでした. 私はJavaScript正規表現で次のことをしようとしています:

var input = "'Warehouse','Local Release','Local Release DA'";
var regex = /'(.*?)'/g;

console.log(input.match(regex));

// Actual:
// ["'Warehouse'", "'Local Release'", "'Local Release DA'"]

// What I'm looking for (without the '):
// ["Warehouse", "Local Release", "Local Release DA"]

JavaScript正規表現でこれを行うきれいな方法はありますか? 明らかに、'自分で s を削除することもできますが、グローバルに一致するグループを正規表現で取得する正しい方法を探しています。

4

8 に答える 8

104

.exec()正規表現でこれを行うには、複数の一致するグループを取得するために反復する必要があります。一致するgフラグは、必要な複数のサブマッチではなく、複数の完全な一致のみを返します。で行う方法を次に示し.exec()ます。

var input = "'Warehouse','Local Release','Local Release DA'";
var regex = /'(.*?)'/g;

var matches, output = [];
while (matches = regex.exec(input)) {
    output.push(matches[1]);
}
// result is in output here

実際のデモ: http://jsfiddle.net/jfriend00/VSczR/


文字列の内容に関する特定の仮定を使用して、これを使用することもできます。

var input = "'Warehouse','Local Release','Local Release DA'";
var output = input.replace(/^'|'$/, "").split("','");

実際のデモ: http://jsfiddle.net/jfriend00/MFNm3/


注: 2021 年の最新の Javascript エンジンではstr.matchAll(regex)、1 回の関数呼び出しですべての一致を使用および取得できます。

于 2013-11-11T18:55:03.513 に答える
5

後読みはJavascriptでサポートされていないため、あまり一般的な解決策ではありませんが、特定の入力に対してこの正規表現は機能するはずです:

m = input.match(/([^',]+)(?=')/g);
//=> ["Warehouse", "Local Release", "Local Release DA"]
于 2013-11-11T19:02:22.967 に答える
1

input.replace(regex, "$1")キャプチャ グループの結果を取得するようなことを試してください。

于 2013-11-11T18:57:07.057 に答える