Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式:跳过引号中的注释_Javascript_Node.js_Regex - Fatal编程技术网

Javascript 正则表达式:跳过引号中的注释

Javascript 正则表达式:跳过引号中的注释,javascript,node.js,regex,Javascript,Node.js,Regex,使用此正则表达式/#(.*)\r?\n|#(.*)$/g我可以解析下面的内容,但它也匹配引号中的注释 我如何避免这种情况 # # this is a comment # but this is '# not a comment' and this is "# not a comment either" # help, please 我试过/(?!\B[“][^']*)(#(.*)\r?\n |#(.*))(?![^']*[“]\B)/g 但结果是错误的 有什么帮助吗 尝试此简单代码,仅在一

使用此正则表达式
/#(.*)\r?\n|#(.*)$/g
我可以解析下面的内容,但它也匹配引号中的注释

我如何避免这种情况

#
# this is a comment
#

but this is '# not a comment'
and this is "# not a comment either"

# help, please
我试过
/(?!\B[“][^']*)(#(.*)\r?\n |#(.*))(?![^']*[“]\B)/g
但结果是错误的


有什么帮助吗

尝试此简单代码,仅在一行开头匹配注释

/^#(.*?)$/gm
演示:

在任何地方匹配注释的替代代码

/^[^'"]*?(#.*?)$/gm
演示:

确保使用
gm
,而不仅仅是
g
,以便您可以使用与行首匹配的
^

这是一个例子

var字符串=`
#
#这是一个评论
#
但这“不是评论”
而这“也不是评论”
#请帮忙
`;
var regex=/^[^'”]*?(#.*)$/gm;
var match=regex.exec(字符串);
while(匹配!=null){
document.write(匹配[1]+'
') match=regex.exec(字符串);
}
试着用这个简单的代码来匹配一行开头的注释

/^#(.*?)$/gm
演示:

在任何地方匹配注释的替代代码

/^[^'"]*?(#.*?)$/gm
演示:

确保使用
gm
,而不仅仅是
g
,以便您可以使用与行首匹配的
^

这是一个例子

var字符串=`
#
#这是一个评论
#
但这“不是评论”
而这“也不是评论”
#请帮忙
`;
var regex=/^[^'”]*?(#.*)$/gm;
var match=regex.exec(字符串);
while(匹配!=null){
document.write(匹配[1]+'
') match=regex.exec(字符串);
}
实现这一点的一种方法是使用捕获组和交替来区分您想要的上下文和您不想要的上下文。这是我从中学到的技巧

诀窍是只把你想要匹配的东西放在一个捕获组中,而把所有其他的选择都排除在捕获组之外。然后,您将根据结果匹配是否有捕获组来筛选结果匹配

正则表达式如下所示:

/'(?:\\.|.)*?'|"(?:\\.|.)*?"|#(.*)$/gm

您可以这样使用它:

/'(?:\\.|.)*?'|"(?:\\.|.)*?"|#(.*)$/gm
var re=/'(?:\\.\.\124;)*?'”(?:\\.\ 124;)*?“\\.\ 35;(.*)$/gm;
var str=`
#
#这是一个评论
#
但这“不是评论”
而这“也不是评论”
#请帮忙
`;
str.replace(re,函数(匹配,组1){
如果(组1!==未定义){
控制台日志(匹配);
}

});实现这一点的一种方法是使用捕获组和交替来区分您想要的上下文和您不想要的上下文。这是我从中学到的技巧

诀窍是只把你想要匹配的东西放在一个捕获组中,而把所有其他的选择都排除在捕获组之外。然后,您将根据结果匹配是否有捕获组来筛选结果匹配

正则表达式如下所示:

/'(?:\\.|.)*?'|"(?:\\.|.)*?"|#(.*)$/gm

您可以这样使用它:

/'(?:\\.|.)*?'|"(?:\\.|.)*?"|#(.*)$/gm
var re=/'(?:\\.\.\124;)*?'”(?:\\.\ 124;)*?“\\.\ 35;(.*)$/gm;
var str=`
#
#这是一个评论
#
但这“不是评论”
而这“也不是评论”
#请帮忙
`;
str.replace(re,函数(匹配,组1){
如果(组1!==未定义){
控制台日志(匹配);
}

});
最好解释一下,
^
匹配行首,它本身并没有跳过引号中的内容。@nnnnnn谢谢您的建议。我更新了我的答案来解释
^
。诚然,
^#
本身并没有跳过引号中的内容,但我认为如果注释出现在一行的开头(通常是这样),它会起到作用。谢谢你,易卜拉欣。看来效果不错。虽然不是问题的一部分。什么会匹配块注释-/*blah blah*/而不是引号内的注释。@Ashwinkumar至于
/*blah*/
的情况,我会使用这个正则表达式
^\/\*[\s\s]*?\*/$
,演示:@nnnnnn我添加了额外的正则表达式来修复您提出的问题。感谢您的反馈!最好解释一下,
^
匹配行的开头,它本身并没有跳过引号中的内容。@nnnnnn谢谢您的建议。我更新了我的答案来解释
^
。诚然,
^#
本身并没有跳过引号中的内容,但我认为如果注释出现在一行的开头(通常是这样),它会起到作用。谢谢你,易卜拉欣。看来效果不错。虽然不是问题的一部分。什么会匹配块注释-/*blah blah*/而不是引号内的注释。@Ashwinkumar至于
/*blah*/
的情况,我会使用这个正则表达式
^\/\*[\s\s]*?\*/$
,演示:@nnnnnn我添加了额外的正则表达式来修复您提出的问题。感谢您的反馈!