java正则表达式 否定_java-正则表达式查找变量并忽略方法

我正在尝试编写一个正则表达式,以查找给定一段 JavaScript代码中的所有变量(并且只有变量,完全忽略方法).实际的代码(执行regex的代码)是用Java编写的.

现在,我有这样的事情:

Matcher matcher=Pattern.compile(".*?([a-z]+\\w*?).*?").matcher(string);

while(matcher.find()) {

System.out.println(matcher.group(1));

}

因此,当“字符串”的值是变量* func()* 20时

打印输出为:

variable

func

这不是我想要的. (的简单否定是不会的,因为它使regex捕获不必要的字符或将其截断,但仍然捕获函数.现在,我有以下代码:

Matcher matcher=Pattern.compile(".*?(([a-z]+\\w*)(\\(?)).*?").matcher(formula);

while(matcher.find()) {

if(matcher.group(3).isEmpty()) {

System.out.println(matcher.group(2));

}

}

可以,打印输出正确,但是我不喜欢额外的支票.有任何想法吗?请?

编辑(2011-04-12):

感谢您的所有答案.有问题,为什么我需要这样的东西.您是对的,如果脚本更大,更复杂,唯一明智的解决方案就是解析它们.但是,就我而言,这太过分了.我正在处理的JS报废旨在成为简单的公式,例如(a b)/ 2.没有注释,字符串文字,数组等.只有变量和(可能)一些内置函数.我需要变量列表来检查它们是否可以初始化,以及这一点(并已全部初始化).我意识到,所有这些操作也可以使用RPN手动完成(这会更安全),但是这些公式将被更大的脚本包装并在Web浏览器中进行评估,因此这种方式更加方便.

这可能有点肮脏,但是假设谁正在编写这些公式(在大多数情况下可能是我),知道正在做什么并且能够检查它们是否正常工作.

如果有人发现这个问题,想要做类似的事情,现在应该冒风险/困难.我愿意,至少我希望如此;)

你可能感兴趣的:(java正则表达式,否定)