RegExp匹配的内容

Jui*_*icy 5 javascript regex node.js

我一直在尝试将以下内容从Python转换为node.js. 这是一个简单的程序,使用正则表达式来检查IP地址是公共还是私有:

import re

def is_private_ip(ip):
    """
    Returns `True` if the `ip` parameter is a private network address.
    """
    c = re.compile('(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)')
    if c.match(ip): return True
    return False

print is_private_ip('192.168.0.1') # True
print is_private_ip('8.8.8.8') # False
print is_private_ip('109.231.231.221') # False
Run Code Online (Sandbox Code Playgroud)

我在Javascript中实现它,如下所示:

var localIp = new RegExp(/(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/);
console.log('192.168.0.1'.match(localIp));
console.log('8.8.8.8'.match(localIp));
console.log('109.231.231.221'.match(localIp));
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出:

[ '192.168.',
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  '192.168.',
  index: 0,
  input: '192.168.0.1' ]
null
null
Run Code Online (Sandbox Code Playgroud)

在我看来它是有效的(甚至不确定tbh).应该公开的两个IP正在返回,null所以我猜这是正确的.我不明白其他比赛的输出了吗?我无法弄清楚它意味着什么

Sal*_*lab 1

var localIp = new RegExp(/(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/);
Run Code Online (Sandbox Code Playgroud)

console.log('192.168.0.1'.match(localIp));

给你输出:

[ '192.168.',
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  '192.168.']
Run Code Online (Sandbox Code Playgroud)

这意味着:

  • '192.168.'这是正则表达式在此字符串上的匹配。唯一的
  • undefined是正则表达式中第一组的匹配:(^127\.0\.0\.1)
  • undefined对于团体:(^10\.)
  • undefined对于团体:(^172\.1[6-9]\.)
  • undefined对于团体:(^172\.2[0-9]\.)
  • undefined对于团体:(^172\.3[0-1]\.)
  • '192.168.'对于团体:(^192\.168\.)

这是因为括号,每个括号都给出一个匹配(或未定义),加上函数match()返回的匹配。