正则表达式为类型的干净javascript注释//

CRI*_*ion 1 html javascript php regex text

我使用以下REGEXP:

$output = preg_replace( "/\/\/(.*)\\n/", "", $output );
Run Code Online (Sandbox Code Playgroud)

代码运行良好但是!!!!,当像(http://this_is_not_a_comment.com/kickme)这样的URL时,代码替换它...(http://)

你怎么做才能取代那些网址.

谢谢,

Gum*_*mbo 8

您需要一个可以区分代码和注释的正则表达式.特别是,由于序列//可以是字符串或注释,您只需要区分字符串和注释.

这是一个可能会这样做的示例:

/(?:([^\/"']+|\/\*(?:[^*]|\*+[^*\/])*\*+\/|"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')|\/\/.*)/
Run Code Online (Sandbox Code Playgroud)

在替换函数中使用它,同时用第一个子模式的匹配替换匹配的字符串应该能够删除//样式注释.

一些解释:

  • [^/"']+匹配任何不是注释开头的字符(both //…/*…*/)或字符串
  • /\*(?:[^*]|\*+[^*/])*\*+/匹配/* … */样式注释
  • "(?:[^"\\]|\\.)*" 匹配双引号中的字符串
  • '(?:[^'\\]|\\.)*' 匹配单引号中的字符串
  • \/\/.*最后匹配//…样式评论.

由于前三个构造在一个捕获组中分组,因此匹配的字符串可用,并且在将匹配的字符串替换为第一个子模式的匹配时不会更改任何内容.仅当//…样式注释匹配时,第一个子模式的匹配为空,因此它被空字符串替换.

但请注意,这可能会失败.我不太确定它是否适用于任何输入.

  • Protip to OP:如果正则表达式看起来很可怕,那么它可能不是正则表达式的工作.无论如何,+1甚至可以开始构建这样的东西. (4认同)

CRI*_*ion 5

$output = preg_replace( "/(?<!\:)\/\/(.*)\\n/", "", $output );
Run Code Online (Sandbox Code Playgroud)