您可以定义folloding正则表达式的参数,这意味着字符串或整数或浮点数或可变
string literal : "[^"]"
int : -?\d+
float : -?\d*\.\d+
variable/function name : [\w\d_]+
parameter : ("[^"]"|-?\d+|-?\d*\.\d+|[\w\d_]+)
那么你的功能是一样的一个变量,然后括号几个parmeters,然后右括号。
rough : function \((|parameter(,parameter)*\)
adding potential spaces : function\s*\(\s*(|parameter\s$(,\s*parameter\s*)*\)
replacing blocks : [\w\d_]+\s*\(\s*(|("[^"]"|-?\d+|-?\d*\.\d+|[\w\d_]+)\s$(,\s*("[^"]"|-?\d+|-?\d*\.\d+|[\w\d_]+)\s*)*\)
请注意,您需要匹配多行和不区分大小写。我不确定它是否具有防错功能,但至少您可以按照您需要处理的这种想法进行微调。
编辑:我认为这是相当复杂的(我可能issed某些情况下),但您的评论后,如果它只是运行的eval,这是毫无意义...... 注意,我只检查假设你使用纯变量,没有对象(否则,应对其不能在第一位置处的点)
我怀疑这是可能的 - 即使它可能非常非常复杂。你可以使用(部分)JavaScript解析器,但也是非常大的。你能解释一下你的整体问题是什么吗?你为什么需要这样做? – RoToRa 2011-04-20 12:26:01
我想使用eval()。但我想首先检查其有效的js函数,因为我不想运行变量或无效字符串。 – ajsie 2011-04-20 12:28:17
请勿使用eval。 – Gareth 2011-04-20 12:29:37