1

文字列から関数の引数を抽出しようとしていますs

var s = "function (a, b,   c) { return \'hello\'; }";
var re = /^function[^\(]*\(\W*(?:(\w+)[,\s)]*)+\)/g;

console.log( re.exec(s) );

/*
[ 'function (a, b,   c)',
  'c',
  index: 0,
  input: 'function (a, b,   c) { return \'hello\'; }' ]
*/

問題

キャプチャーのみcです。

望ましい出力

/*
[ 'function (a, b,   c)',
  'a',
  'b',
  'c',
  index: 0,
  input: 'function (a, b,   c) { return \'hello\'; }' ]
*/

免責事項

このコードはモジュールで使用され、単一の正規表現で実行する必要があります。StackOverflow で見た他の手法は機能しません。

4

2 に答える 2

1

正規表現内に可変数のキャプチャ グループを含めることはできません。おそらくできる最善のことは次のとおりです。

var s = "function (a, b,   c) { return \'hello\'; }";
s.match(/.*?\((.*)\)/)[1].split(/[,\s]+/);

// returns ["a", "b", "c"]
于 2012-09-11T19:25:34.630 に答える
0

タスクをサブタスクに分割することをお勧めします。

  • 引数のリストを取得する
  • 取得したリストを分割する
  • 結果を構成する

このような:

var reFuncDecl = /^function\s*\(([^)]+)\)/g,
    reSplitArg = /[,\s]+/;

function funcInfo(s) {
    var matches = reFuncDecl.exec(s),
    args = matches[1].split(reSplitArg);
    reFuncDecl.lastIndex = 0;
    return {
        declaration: matches[0],
        args: args,
        input: s
    };
}


var s = "function (a, b,   c,d,e,\nf) { return \'hello\'; }",
    info = funcInfo(s);
for(var prop in info) {
    document.write(prop + ': ' + info[prop] + '<br />');
}
console.log(funcInfo(s));​

デモ

于 2012-09-11T20:04:55.493 に答える