2016-01-08 42 views
1

所以,如果我想抓住不含評論系統之間的文本:獲取常規註釋語法之間的文本

/*this is a comment*/ 
//this is too 
//and so is this... 
This, however, isn't. 

輸出將

This, however, isn't. 

我怎麼能做到這一點的JavaScript?我要去搶它的正則表達式,但我不知道如何處理以空白結尾的註釋...

任何幫助,將不勝感激。

編輯:也許我一直不清楚。我有一個上述文本的數組。我想擺脫任何不在評論中的東西,我想按原樣顯示評論。所以:

/*This is a longggg 
    comment that crosses several lines 
    etc etc etc*/ 
this is plain text. i want to ignore this //however, this is another comment 
/*one more comment here*/ 

這將被輸出爲:

/*This is a longggg 
    comment that crosses several lines 
    etc etc etc*/ 
//however, this is another comment 
/*one more comment here*/ 
+1

評論不會被任何腳本或編程語言讀取,它們在代碼運行時會被忽略。所以你根本看不懂評論。 –

+0

@AbdulJabbarWebBestow - 我想他只是想使用JavaScript作爲解析器,給出了評論作爲一個字符串。 –

+5

你究竟想要完成什麼? – charlietfl

回答

-1

使用此正則表達式來匹配你的代碼的所有意見:

/(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)/igm 

然後存儲您的評論在一個單獨的變量。 然後顯示你想顯示所有評論的變量。

+0

這個正則表達式似乎是無效的語法。例如,一開始你有'(/',但是'/'在正則表達式中不是有效的字符,除非被轉義,我還懷疑這個正則表達式是否可以在字符串中使用類似註釋的結構,比如'var s =「/ * Hello * /」;'。 –

+0

我在發佈之前測試了正則表達式:http://www.regexpal.com/ –

+0

請提供指向此正則表達式的特定regexpal頁面的鏈接 –

0

使用正則表達式無法可靠地做到這一點。你應該使用一個帶註釋的小型文件(比如uglify),或者一個JS解析器(比如esprima)。話雖如此,以下可能會或多或少的工作:

/\/\*[^]*?\*\/|\/\/.*$/gm 
^^^^^^^^^^^^^    CAPTURE /* */ COMMENTS 
       ^^^^^^^  CAPTURE // COMMENTS 

請注意順序。我們首先需要尋找/* */風格的評論,否則我們可能會在/* */內挑選//序列。

在這裏使用[^]來挑選任何字符,包括換行符。其他人喜歡使用[\s\S]

但是,這並不能正確處理看起來像字符串內部註釋的事情。