需要帮助来理解复杂的javascript正则表达式

时间:2014-10-04 10:46:01

标签: javascript regex

我试图理解这个正则表达式的含义:

/^\s*[^#].*?\s*:\s*([a-f0-9.:]+?)\s*-\s*([a-f0-9.:]+?)\s*$/

我正在尝试理解nodejs的模块,因为我不是正则表达式的专家,所以这有点难。

如果有人能翻译那个表达,那将会非常有帮助。


很好的答案。

我想要了解的是以下功能:

var parseBlocklist = function(filename) {

 var blocklistData = fs.readFileSync(filename, { encoding: 'utf8' });
 var blocklist = [];
 blocklistData.split('\n').forEach(function(line) {
 var match = null;
 if ((match = /^\s*[^#].*?\s*:\s*([a-f0-9.:]+?)\s*-\s*([a-f0-9.:]+?)\s*$/.exec(line))) {
  blocklist.push({
  start: match[1],
  end: match[2]
 });
}
});
return blocklist;
};

目前我意识到:

该函数将文件作为参数并读取整个内容

之后,对于组成文件的每一行内容,使用正则表达式执行某些操作。

似乎这个"的结果"被推入阵列。

如果可以,请更好地解释此功能的目的。

2 个答案:

答案 0 :(得分:0)

给定的正则表达式是多个正则表达式的组合,请记住,您可以将这个复杂的正则表达式分解为多个较小的正则表达式,并且每个较小的正则表达式都可以轻松翻译

请参阅此Wiki页面以查找每个小正则表达式部分的含义 http://en.wikipedia.org/wiki/Regular_expression

你的正则表达式可以分解为

/^                         Start of line
\s*                        zero or more space non white character
[^#].?                     not equal to hash atleast one
\s                         non white character
:                          colon
\s*                        zero or more space non white character
([a-f0-9.:]+?)             hexa digit (one or more)
\s*                        zero or more space non white character    
-                          dash
\s*                        zero or more space non white character
([a-f0-9.:]+?)             hexa digit (one or more) 
\s*                        zero or more space non white character
$/                         end of line

答案 1 :(得分:0)

/ ^行首

\ s *可选空白

[^#]除了#

以外的任何内容

。*?任何负担

\ s *更多空格

:冒号

\ s *更多空格

([a-f0-9.:]+?)一些十六进制但允许。并且:出于某种原因

\ s *更多空格

  • 减去

\ s *更多空格

([a-f0-9.:]+?)more hex

\ s *更多空格

$ /行尾