首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RegExp匹配的内容

RegExp匹配的内容
EN

Stack Overflow用户
提问于 2016-01-14 11:59:55
回答 5查看 204关注 0票数 5

我一直在尝试将下面的内容从Python转换为node.js。它是一个简单的程序,它使用regex检查IP地址是公共地址还是私有地址:

代码语言:javascript
运行
复制
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

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

代码语言: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));

这给了我以下输出:

代码语言:javascript
运行
复制
[ '192.168.',
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  '192.168.',
  index: 0,
  input: '192.168.0.1' ]
null
null

在我看来,这是可行的(甚至不确定tbh)。应该公开的两个I正在返回null,所以我猜这是对的。但我不明白另一场比赛的结果是什么?我还不知道这意味着什么

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-01-14 12:18:43

代码语言: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));

给出输出:

代码语言:javascript
运行
复制
[ '192.168.',
  undefined,
  undefined,
  undefined,
  undefined,
  undefined,
  '192.168.']

这意味着:

  • '192.168.',它是这个字符串上正则表达式的匹配。唯一的一个
  • undefined是regex中第一个组的匹配:(^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()函数返回的匹配。

票数 1
EN

Stack Overflow用户

发布于 2016-01-14 12:12:45

.match()给出了字符串中可能的匹配数。也许您要寻找的是.test()方法。

您需要像这样修改代码:

代码语言: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(localIp.test('192.168.0.1'));
console.log(localIp.test('8.8.8.8'));
console.log(localIp.test('109.231.231.221'));

有关match方法的更多详细信息,请参阅此处:对象/字符串/匹配

票数 1
EN

Stack Overflow用户

发布于 2016-01-14 12:13:12

String.prototype.match()

如果正则表达式不包括g标志,则返回与RegExp.exec()相同的结果。返回的Array有一个额外的输入属性,该属性包含解析的原始字符串。此外,它还有一个index属性,它表示字符串中匹配的基于零的索引。

RegExp.prototype.exec()

返回的数组将匹配的文本作为第一个项,然后为每个匹配的包含所捕获文本的括号提供一个项。 如果匹配失败,exec()方法将返回null。

也许您想要使用RegExp.prototype.test()来代替:

代码语言: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(localIp.test('192.168.0.1'));      // => true
console.log(localIp.test('8.8.8.8'));          // => false
console.log(localIp.test('109.231.231.221'));  // => false
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34789109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档