2014-03-02 45 views
0

我在教自己的正則表達式使用兩個網站的組合Eloquent JavaScriptregular expressions.info。我試圖通過一個自制的例子來回引用,在這個例子中,我想大致能夠測試Java while循環的句法正確性(爲了簡單起見,我們將其限制爲while(值運算符值))。返回參考錯誤在JavaScript正則表達式

但是請看下面的代碼,您將看到參考\ 1似乎不起作用。我已經在JS中嘗試了我的解決方案。還可以使用軟件工具The Regex Coach。

任何人都可以在這裏看到問題嗎?

var rx = /^while\s*\((\s*[a-zA-Z][a-zA-Z0-9_]*\s*)(\<\=|\<|\>\=|\>|\!\=|\=\=)\s*\1\)/ 

document.writeln(rx.test("while(x <= y)")); 

回答

1

你的正則表達式將匹配

while(x <= x) 

因爲\1,是由第一個捕獲組匹配的精確匹配文本 - 在這種情況下是"x "。由於"y""x "不一樣,因此您的正則表達式在您選擇的示例上失敗。

對於你的榜樣,下面將工作:

var rx = /^while\s*\(\s*([a-zA-Z]\w*)\s*(<=?|>=?|!=|==)\s*([a-zA-Z]\w*)\s*\)$/ 

注意\w是在JavaScript [a-zA-Z0-9_]的簡寫,而你不需要逃避所有這些符號。

+0

我甚至無法在您的示例中找到匹配項。所以你說的是沒有辦法做我想要的東西? –

+1

@Andrew S:注意x字符周圍的空白(我正準備和Tim一樣給出類似的答案) –

+0

哦,是的,我明白了。那麼有沒有辦法做我需要的? –