2017-08-17 27 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;