我有一些混淆代码调用函数,如下所示:
getAny([["text with symbols \"()[],.;\" and maybe 'ImVerySeriousFn'"], ...]);
setAny([["other text with \"()[],.;\""], ...]);...
参数包含随机文本。函数相互跟随,没有换行。
如何使用正则表达式集合获取getAny
,setAny
和其他函数的参数?
我需要这个结果:
regex1 result: [["text with symbols \"()[],.;\" and maybe 'ImVerySeriousFn'"], ...]
regex2 result: [["other text with \"()[],.;\""], ...]
...
我尝试写regex1
:
getAny\((.*)\)
但匹配结果还包含setAny
调用
[["text with symbols \"()[],.;\" and maybe 'ImVerySeriousFn'"], ...]);setAny([["other text with \"()[],.;\""], ...]
当我尝试时:
getAny\((.*?)\)
匹配结果break参数字符串
[["text with symbols \"(
我无法按;
或);
拆分,因为参数中的文字可以包含符号;
或);
使用正则表达式可能无法做到这一点?
答案 0 :(得分:2)
你的正则表达式需要\(.*?\);
,因为你的代码被混淆了(假设在一行上)。
请注意,如果您的某个参数中包含);
,则会失败。
解释(来自Regex101.com):
/\((.*?)\);/g
\( matches the character ( literally
1st Capturing group (.*?)
.*? matches any character (except newline)
Quantifier: Between zero and unlimited times, as few times as possible, expanding as needed [lazy]
\) matches the character ) literally
; matches the character ; literally
g modifier: global. All matches (don't return on first match)
你的正则表达式的主要问题是你从未指定;
来结束匹配,所以它继续前进并抓起它直到它看到的最后)
,因为你使用了.*
,这是贪婪的(抓住一切),除非后跟?
。
答案 1 :(得分:0)
我不知道,如果我理解你的问题,但是如果我这样做,你可以使用一个小组并收集允许的标志。
你的正则表达式可能是:\( ( ) " [ ],\.; a-zA-Z \)
外部括号将组
括起来答案 2 :(得分:0)
如果我正确理解您的模式,您的函数参数将始终以[["
开头,并以"]]
结尾。
正则表达式:
/getAny\((\[\[".*?[^\\]"\]\])\);/
演示:http://regex101.com/r/jC3vX5/2
请注意惰性.*?
和[^\\]
,以确保不会转义匹配的报价。