我想寫一個正則表達式,它在給定的JavaScript代碼片段中查找所有變量(並且只有變量,完全忽略方法)。實際的代碼(執行正則表達式的代碼)是用Java編寫的。正則表達式來查找變量和忽略方法
現在,我有這樣的事情:
Matcher matcher=Pattern.compile(".*?([a-z]+\\w*?).*?").matcher(string);
while(matcher.find()) {
System.out.println(matcher.group(1));
}
所以,當 「串」 的價值variable*func()*20
打印輸出:
variable
func
這是不是我想要。 (
的簡單否定不會這樣做,因爲它使得正則表達式捕獲不必要的字符或將其截斷,但仍然捕獲函數。現在,我有以下代碼:
Matcher matcher=Pattern.compile(".*?(([a-z]+\\w*)(\\(?)).*?").matcher(formula);
while(matcher.find()) {
if(matcher.group(3).isEmpty()) {
System.out.println(matcher.group(2));
}
}
它的工作,打印輸出是正確的,但我不喜歡額外的檢查。有任何想法嗎?請?
EDIT(2011-04-12):
感謝所有的答案。有問題,爲什麼我需要這樣的東西。如果腳本更大更復雜,唯一合理的解決方案就是解析它們。但就我而言,這將是過度的。我正在研究的JS碎片只是簡單的公式,就像(a+b)/2
。沒有評論,字符串文字,數組等。只有變量和(可能)一些內置函數。我需要變量列表來檢查它們是否可以初始化並且這一點(並且完全初始化)。我意識到所有這些都可以通過RPN手動完成(這會更安全),但是這些公式將被更大的腳本包裹並在Web瀏覽器中進行評估,因此這樣更方便。
這可能有點髒,但是假設誰在寫這些公式(可能是我,大部分時間),知道在做什麼並且能夠檢查他們是否正常工作。
如果有人發現這個問題,想要做類似的事情,現在應該是風險/困難。我這樣做,至少我希望如此;)
這不完全相同,但是,看看這個asnwer:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454正則表達式不是萬能的! – Serafeim 2011-04-11 13:21:35