2017-06-15 28 views
-1

我用Python寫一個Javascript minifier,我試圖通過使用正則表達式JS正則表達式虛位以待

\s\/\/[^\n]*\n 

那是給我從正則表達式意外結果的JavaScript是刪除評論

/* deliberately different */ 
// test line 1 
// test line 2 
var test_http = "http://test.com"; 

我使用在Regex101大正則表達式的測試資源,它表明// test line 2不匹配,我不明白爲什麼。
注意:爲了不與test_http變量等聲明匹配,我在評論前故意尋找空格(包括換行符)。

任何人都可以爲我闡明這一點對我來說好嗎?

+0

*** \ S \/\/[^] * \ n ***,這似乎是工作 – Stack

+0

是'\/\/\ s。*'你在找什麼? – DeepSpace

+0

@Stack - 不,它匹配第1行,直到最後一個換行符([^]匹配任何字符,包括換行符)。 – kevstev01

回答

0

爲了不匹配諸如test_http變量之類的聲明,我特意在註釋前尋找空格(包括換行符)。

如果我們可以假設,每個評論將開始一個新行,那麼這個模式會工作:

^(?:(?:/\*(?:.|\n)*?\*/)|(?://.*)) 

Live Demo


然而,如果不是這種情況你將不得不投入一些時間來開發一個上下文感知解析器。這是因爲正則表達式從未被設計爲上下文感知。如果你想根據匹配的上下文采取不同的行動,單獨的正則表達式不會(通常)就足夠了。

這種模式可以結合使用與上下文感知的解析器,以確定意見:

(?:/\*(?:.|\n)*?\*/)|(?://.*) 

Live Demo

+0

謝謝,但該模式也符合我試圖避免的變量定義'var test_http =「http://test.com」;'。 – kevstev01

+0

正則表達式用於模式匹配字符串,並沒有被設計爲上下文感知。如果你想根據匹配的上下文采取不同的行動,你需要投入一些時間來開發一個上下文感知解析器。 – Olian04

+0

@ kevstev01我已經在我的答案中添加了一部分,它可能有助於您的具體情況。 – Olian04