2 regex comments match regex-negation
所以我需要一个正则表达式来查找单行和多行注释,但不是在字符串中.(例如"my /* string"
)
用于测试(#
单线/*
和*/
多线):
# complete line should be found
lorem ipsum # from this to line end
/*
all three lines should be found
*/ but not here anymore
var x = "this # should not be found"
var y = "this /* shouldn't */ match either"
var z = "but" & /* this must match */ "_"
Run Code Online (Sandbox Code Playgroud)
所以语法显示真的很好; 我基本上想要所有的灰色文字.
我不在乎它是单个正则表达式还是两个正则表达式.;)
编辑:还有一件事.相反的也会满足我,搜索一个不在注释中的
字符串这是我当前的字符串匹配:( "[\s\S]*?(?<!\\)"
确实:将无法使用"\\"
)
EDIT2:
好的,最后我写了自己的评论解析器-.-
如果其他人对源代码感兴趣,请从这里抓取它:https://github.com/relikd/CommentParser
这是一种可能性(它确实有一个阿基里斯的脚跟,我会得到):
(#[^"\n\r]*(?:"[^"\n\r]*"[^"\n\r]*)*[\r\n]|/\*([^*]|\*(?!/))*?\*/)(?=[^"]*(?:"[^"]*"[^"]*)*$)
Run Code Online (Sandbox Code Playgroud)
在这里行动
使用GLOBAL和DOTALL标志,但不是 MULTILINE标志.
正则表达式的解释:
(
#[^"\n\r]* Hash mark followed by non-" and non-end-of-line
(?:"[^"\n\r]*"[^"\n\r]*)* If any quotes in the comment, they must be balanced
[\r\n] Followed by end-of-line ($ except we
don't have multiline flag)
| OR
/\*([^*]|\*(?!/))*?\*/ /* xxx */ sort of comment
) BOTH FOLLOWED BY
(?=[^"]*(?:"[^"]*"[^"]*)*$) only a *balanced* number of quotes for the
*rest of the code :O!*
Run Code Online (Sandbox Code Playgroud)
但是,这依赖于整个文本中使用的平衡引号(它也没有考虑转义引号,但是很容易修改正则表达式以考虑到这一点).
如果一个用户的评论中有一个"不平衡的话......繁荣.你被搞砸了!
HTML /代码解析之类的东西通常不推荐使用正则表达式,但是如果你可以依赖于在定义字符串等时引号必须平衡的事实,你有时可以使用它.
既然你也分析评论,其中有没有固定的结构(即你不能保证在注释中的报价将是平衡的),你将无法找到在这里工作正则表达式的解决方案.
你想到的任何东西都可以通过某个地方的评论中的不平衡报价(比如说评论# remove all the " marks
)或者多行字符串(在给定行上可能存在不平衡报价)来证明.
底线 - 您可以制作一个在大多数情况下都能正常运行的正则表达式,但并非适用于所有情况.要获得不透水的东西,你必须编写一些代码.
归档时间: |
|
查看次数: |
2794 次 |
最近记录: |