这个例子来自eloquent javascript本书。虽然书中有一点点解释但很难理解,任何人都可以从初学者的角度解释它。我很难跟上什么斜线是什么。
function stripComments(code) {
return code.replace(/\/\/.*|\/\*[^]*\*\//g, "");
}
答案 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