2017-08-17 25 views
1

我需要一個正則表達式。它不需要很複雜,但必須覆蓋所有基地。要求如下:我需要什麼JavaScript正則表達式來區分註釋和文件路徑?

我不得不按照文件模式是這樣的一個文件是這樣的:

chest/.setup.js 
chest/**/*-chest.js 
--choppers something:hello-there/wasup 
--respite spoc 
--chow ./chest//test.bootstrap#1 
--chow ./chest/server.bootstrap# 
--blow 200 

我必須支持數以千計的具有相似外觀的其他文件。

我想使用//#中的一個來支持這些文件中的註釋。

我的代碼需要在使用正則表達式匹配處理之前從文件內容中提取註釋。

我還沒有決定使用哪種評論語法(請不要回答,因爲只有一個會被使用)。

評論可能在一行的開頭(註釋整行)或結尾的同一行(註釋掉所有行之後的所有行)。

文件路徑可能是「幼稚」和包含雙斜槓是這樣的... /path//to/file/example.js

還記得#是一個有效的文件名字符和文件名可以包含空格一些操作系統。

我的問題是:

(1)需要什麼樣的正則表達式,如果我用//語法撕裂了意見?

(2)如果我使用#語法,需要什麼正則表達式來翻譯註釋?

請隨時回答(1)或(2)或兩者都單獨但不能在一起。

如果您覺得我應該考慮其他因素,請告知。 ES5語法中的首選答案(惱人的限制)。

+1

有很多這樣的網站:https://開頭regex101 .com /。你把文本搜索在一個盒子裏,然後你在另一個盒子裏寫正則表達式。它會向你顯示比賽結果,並有文件幫助你一路走來。 – Will

+2

我不太確定你可以單獨在這些規則上區分文件路徑中的評論......你可以用任何方式強制評論風格? – jdubjdub

回答

2

要避免以--開頭的行,可以使用此正則表達式模式。

var noDoubleDashComments = /^(?!\s*--).*$/gm; 

^:如果 多行標誌(M)是使能匹配字符串的開頭,或行的開始。這匹配一個位置,而不是一個 字符。

(\ S * - ?!):負先行,以避免與0 或多個空格,後面2個daches

開頭的行* $:任何字符到行的末尾

標記

g:全局搜索。找到所有的發生,而不是隻發現第一個。 m:當啓用多行標誌時,開始和結束錨(^和$)將匹配行的開始和結束,而不是整個字符串的開始和結束。

其他註釋風格:

var noDoubleForwardSlashComments = /^(?!\s*\/{2}).*$/gm; 

var noHashComments = /^(?!\s*#).*$/gm; 

var noHashOrDashOrSlashComments = /^(?!\s*(?:\/\/|--|#)).*$/gm; 

如果存在具有文本,然後雙破折號註釋行?
例如:

it's over 9000 -- DBZ reference 

您可以使用類似下面的評論之前或者到行結束只得到文字:

var noDoubleDashCommentsAtAll = /^(?!\s*--).+?(?=\s*--|$)/gm;