javascript正则表达式 - 删除注释

时间:2014-08-28 12:10:43

标签: javascript regex

这个例子来自eloquent javascript本书。虽然书中有一点点解释但很难理解,任何人都可以从初学者的角度解释它。我很难跟上什么斜线是什么。

function stripComments(code) {
  return code.replace(/\/\/.*|\/\*[^]*\*\//g, "");
}

4 个答案:

答案 0 :(得分:6)

评论可以有两种形式:

// this is a comment
/* this is a comment */

不幸的是,/*都是正则表达式中的特殊字符,因此必须对它们进行转义。

所以我们从空匹配表达开始

//g

我们将其设置为匹配第一个表单//,后跟任意数量的字符,这些字符为//.*但是斜杠必须转义

/\/\/.*/g

另一种形式,/*后跟*/后跟的任何内容都是/*[^]**/,但我们必须逃避字面斜线和星号

\/\*[^]*\*\/

然后将这两种形式与|字符组合,表示“或”:

\/\/.*|\/\*[^]*\*\/

并插入空的正则表达式

/\/\/.*|\/\*[^]*\*\//g

答案 1 :(得分:2)

第一个和最后一个斜杠是分隔符。

最后的

g是一个修饰符(修饰符用于执行不区分大小写和全局搜索)并执行全局匹配(查找所有匹配而不是在第一次匹配后停止)。

|表示 OR

\/\/.*有一些转义字符,可以翻译为// followed by any characters \/\*[^]*\*\/也有一些转义字符,可以翻译为/*any characters*/

注意:必须对/*进行转义,因为它们由正则表达式语法(特殊字符)使用。因此\/表示/\*表示*,而.*表示任何字符(0次或更多次)

由于您的代码的目标是删除评论,因此// xxxx/* xxx */等所有评论都将替换为空字符串

答案 2 :(得分:1)

/ - >正则表达式的开始

/ - >转义“/”字符

/ - >转义“/”字符

。* - >任何角色(甚至是空的) - >这是// abck

的情况

| - > OR

/ - >转义“/”字符

* - >逃脱“*”字符

[^] * - >任何字符(多行,所以甚至\ n \ r)

* - >逃脱“*”字符

/ - >转义“/”字符 - >这是案例/ * aasd \ nasdasd * /

/ - >正则表达式结束

g - >全局修饰语

答案 3 :(得分:1)

让我们用每行一个标记将其分解:

/    # Start a new regex

# This group of tokens matches comments in the form:
# // this is a comment

\/   # An escaped forward slash
\/   # An escaped forward slash
.*   # Any character, zero or more times

|    # OR. This means "match either the previous or the next group of tokens".

# This group of tokens matches comments in the form:
# /* 
#  This is a comment, which could include some new lines
# */

\/   # An escaped forward dlash
\*   # An escaped asterisk
[^]* # A newline, zero or more times
\*   # An escaped asterisk
\/   # An escaped forward slash

/    # Finish the current regex.
g    # This regex can match multiple times against a given input
相关问题