2017-06-15 65 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