正则表达式javascript匹配函数字符串中的函数

时间:2016-05-31 07:41:11

标签: regex

我有这个字符串:

  

0;对于(var b = 0; 32> b; b ++)if(a& 1<< 31-b)返回b;返回32}); Math.Fb = Math.clz32; var xa = Math 。ABS,HB = Math.cos,IB = Math.sin,JB = Math.atan2,OA = Math.ceil,VB = Math.floor,KB = Math.pow,UB = Math.min,K = 0时,发= null,aa = null; c.addRunDependency = Da; c.removeRunDependency = Ea; c.preloadedImages = {}; c.preloadedAudios = {}; var J = null,M = [function(a){var b = new的WebSocket(W(A)); b.binaryType = “arraybuffer”; b.events = []; b.onopen =函数(){b.events.push([2,0,0]); VA()} ; b.onerror =函数(){b.events.push([3,0,0]); VA()}; b.onclose =函数(){b.events.push([4,0,0] ); va()}; b.onmessage = function(a){a = new Uint8Array(a.data); var c = A(a.length); ka(a,c); b.events.push([ 1,c,a.length]); va()}; for(a = 0; a> 2)= a [1]; p [d>> 2] = a [2];返回a [0] },功能(A,b,d,C,E){纳克并[a] .clearRect(b,d,C,E)},功能(A,b,d){A =纳克并[a] .canvas; p [b个→2] = a.width; p [d取代;→2] = a.height},功能(A,b,d){A =纳克并[a] .canvas; a.width = b ; a.height = d},函数(){纳克并[a] .save()},功能(A,b,d){纳克并[a] .translate(b,d)},功能(A,b ,d){纳克并[a] .scale(b,d)},功能(一个){ng [a] .restore()},function(a,b,d,c){ng [a] .fillStyle =“rgb(”+ b +“,”+ d +“,”+ c +“)”} ,功能(A,b,d,C,E){纳克并[a] .fillRect(b,d,C,E)},功能(A,b,C,E){纳克[α] .strokeStyle =” rgb(“+ b +”,“+ c +”,“+ e +”)“},函数(a,b){ng [a] .globalAlpha = b},函数(a){ng [a] .beginPath() },功能(A,b,C){纳克并[a] .moveTo(b,C)},功能(A,b,C){纳克并[a] .lineTo(b,C)},函数(a)中{纳克并[a] .stroke()},功能(A,b){纳克并[a] .rotate(b)},功能(A,b,C,E){纳克并[a] .drawImage(NG并[b ] .canvas,c,e)},function(a){ng [a] .fill()},function(){var a = document.getEl

使用正则表达式,如何从中提取dy

这是我到目前为止的正则表达式:function(a,b,d,c){n.g[a].fillStyle="rgb("+b+", "+d+","+c+")"}

上面的正则表达式的问题在于它从它找到的第一个/function\((.*)\).*fillStyle.*?}/中选择了所有的方式,而不仅仅是我想要的函数。

1 个答案:

答案 0 :(得分:1)

如果函数签名中没有(),并且函数体内有{},则可以使用

/function\(([^()]*)\){[^{}]*fillStyle[^{}]*}/

请参阅this regex demo

这个想法是你可以使用否定的字符类[^()][^{}],以免溢出函数边界。

更安全的正则表达式将匹配从(){,然后从{},匹配:

/function\(([^)]*(?:\)(?!{)[^)]*)*)\){[^f}]*(?:}(?!,)[^}f]*|f(?!illStyle)[^}f]*)*fillStyle[^}]*(?:}(?!,)[^}]*)*}/

请参阅another regex demo

我们的想法是使用展开的驯化贪婪令牌,一个是[^)]*(?:\)(?!{)[^)]*)*(最多匹配)}),第二个是[^f}]*(?:}(?!,)[^}f]*|f(?!illStyle)[^}f]*)*来匹配所有不是},的文本{1}}而不是fillStyle,第三个[^}]*(?:}(?!,)[^}]*)*匹配所有不是},的文字。