-6

私はJSコードを持っています。

各関数の開始位置を ('{' 記号を介して) 見つけたいのですが、正規表現を使用してどのように見つけることができますか?

編集: 100% 正確であることは不可能であることを理解しています。正規表現を介して関数の 99% を見つけるにはどうすればよいですか? 迅速な代替手段はありますか?

4

2 に答える 2

1

JavaScriptは正規言語ではないため、正規表現を使用して解析することはできません。JavaScriptを正確に解析する場合は、PlainOldCode™を使用する必要があります。

たとえば、このスニペットは次の関数を作成します。

function()
{
    alert('foo');
}

このスニペットは関数とコードブロックを呼び出しますが、

foo.
function()
{
    alert('foo');
}

このようなニュアンスは、単純な正規表現では理解できません。

于 2012-07-17T13:18:30.837 に答える
0

文字列にすると、このソリューションを使用できます。同様の問題があり、関数を見つけるためにこの関数を実行しました:

// String with some functions to search.
var myStr =
`
foo1(){
   var blabla = null;
}

foo2 () {
   var blabla = null;
}

foo3(params) {
   var blabla = null;
}

foo4(params1,params2) {
   var blabla = null;
}

foo5(params1: string, params2: int) {
   var blabla = null;
}
`;

// Function to find functions syntax.
function searchForFunctions(str) {
   var positionStartFunctions = [];
   var functionArr = str.match(/([a-zA-Z0-9]+)\s*\({1}([a-z0-9,:\s]*)\){1}\s*\{/g);

   for(var i=0; i<functionArr.length; i++) {
      var functionLength = functionArr[i].length;
      var functionIndexMatched = str.indexOf(functionArr[i]);
      var positionOfCurlyBracket = (functionLength + functionIndexMatched);

      positionStartFunctions.push(positionOfCurlyBracket);
   }

   return positionStartFunctions;
}

var listOfCurlyBracketsFunctions = searchForFunctions(myStr);
console.log(listOfCurlyBracketsFunctions);

この関数は、見つかった各関数の最初の中かっこのインデックスを含む配列を返します。

)この正規表現を、 params または と の間にスペースを含むすべての関数構造と一致するように作成しました{

長い時間が経ちましたが、これは他の誰かを助けるかもしれません。

于 2020-05-18T00:00:01.440 に答える