【问题标题】:need help to understand complex javascript reg exp需要帮助来理解复杂的 javascript 正则表达式
【发布时间】:2014-10-04 10:46:01
【问题描述】:

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

/^\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;
};

当时我意识到:

函数以文件为参数,读取全部内容

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

好像这个“东西”的结果被推入了数组。

如果可以,请更好地解释这个函数的用途。

【问题讨论】:

标签: javascript regex


【解决方案1】:

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

请参阅此 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

【讨论】:

    【解决方案2】:

    /^ 行首

    \s* 可选空格

    [^#] 除了 # 之外的任何东西

    .*?一堆东​​西

    \s* 更多空格

    :冒号

    \s* 更多空格

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

    \s* 更多空格

    • 减号

    \s* 更多空格

    ([a-f0-9.:]+?) 更多十六进制

    \s* 更多空格

    $/ 行尾

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2012-11-30
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多