我需要一个正则表达式。它不一定复杂,但必须涵盖所有基础。要求如下:
我不得不遵循的文件模式是这样的文件:
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语法中的首选答案(一种恼人的限制)。
答案 0 :(得分:2)
要避免以--
开头的行,您可以使用此正则表达式模式。
var noDoubleDashComments = /^(?!\s*--).*$/gm;
^:匹配字符串的开头,或者匹配行的开头if 多行标志(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;