JS正则表达式获取分组内容的方法详解

JS正则表达式获取分组内容的方法详解

正则表达式在JavaScript中的使用非常广泛,它既可以用于匹配字符串,也可以用于提取字符串中的某些部分。在很多情况下,我们需要从一个字符串中获取指定的内容,而这些内容可能位于字符串的某个位置,有时也需要将它们按照一定的规则进行分组。在这篇文章中,我们将会详细讲解如何使用正则表达式来获取分组内容。

普通分组

普通分组是指我们需要在正则表达式中使用一个或多个圆括号将需要匹配的部分括起来,以便后面可以使用$1、$2等特殊符号来获取匹配到的内容。

例如,接下来的代码段中的正则表达式包含一个普通的分组,它可以匹配类似于“abc123”这样的字符串,并将其中的字母和数字分别放在两个分组中:

var str = "abc123";
var reg = /^([a-z]+)(\d+)$/i;
var match = reg.exec(str);
console.log(match[0]); // 匹配到的完整字符串,即"abc123"
console.log(match[1]); // 第一个分组,即"a bc"
console.log(match[2]); // 第二个分组,即"123"

在上面的例子中,我们使用了^和$这两个元字符将整个正则表达式限定在了字符串的起始和结尾,以确保我们只会匹配到“abc123”这个完整的字符串。同时,在表达式的中间部分,我们使用了两个圆括号将正则表达式分成了两个部分,即[a-z]+和\d+。这两个部分分别对字母和数字进行了匹配,并将匹配到的内容放在了相应的分组中。

最后,在正则表达式匹配到字符串之后,我们可以使用exec方法获得匹配对象,该对象的若干属性对应了匹配到的内容和分组。

命名分组

除了普通分组之外,还可以使用命名分组来对正则表达式进行分组,以便更加灵活地获取匹配到的内容。命名分组的语法如下所示:

?(<name>...)

其中,name 表示该分组的名称,可以是任意有效的 JavaScript 标识符。...表示分组中需要匹配的内容,可以是一个正则表达式或多个正则表达式组合而成。

例如,接下来的代码段中的正则表达式包含一个命名的分组,它可以匹配类似于“John Doe ([email]john.doe@example.com[/email])”这样的字符串,并将其中的姓名和电子邮件地址放在了相应的分组中:

var str = "John Doe (john.doe@example.com)";
var reg = /^(?<name>[a-z]+\s[a-z]+)\s+\((?<email>[^\s\)]+)\)$/i;
var match = reg.exec(str);
console.log(match[1]); // 姓名,即"John Doe"
console.log(match[2]); // 电子邮件地址,即"john.doe@example.com"

在上面的例子中,我们使用了一对?()符号来表示一个命名的分组,其中name表示该分组的名称,[a-z]+\s[a-z]+表示匹配一个或多个字母和一个或多个空格,[^\s)]+表示匹配一个或多个非空白字符和一个右括号。最后,我们使用exec方法获取匹配对象,并通过相应的属性来获取匹配到的内容。

示例一:提取URL中的域名

接下来,我们将使用一个示例来演示如何使用正则表达式提取URL中的域名:

var url = "https://www.baidu.com/index.html";
var reg = /^https?:\/\/(?<domain>[^\/]+)\//i;
var match = reg.exec(url);
console.log(match[1]); // "www.baidu.com"

在上面的代码中,我们定义了一个名为domain的命名分组,它匹配了URL中的域名部分。具体来说,我们使用了^和$来限定正则表达式只能匹配以“https://”或“http://”开头的URL,然后使用了?()符号来定义一个名为domain的命名分组,该分组将匹配URL中“//”和“/”之间的部分,也就是域名部分。最后,我们使用exec方法获取匹配对象,并通过名称为domain的属性来获取命名分组中匹配到的内容。因此,该示例可以成功提取出“www.baidu.com”作为域名。

示例二:提取HTML中的img标签

接下来,我们将使用另一个示例来演示如何使用正则表达式提取HTML中的img标签:

var html = '<div> <img src="https://www.baidu.com/img/bd_logo1.png" width="270" height="129" /></div>';
var reg = /<img\s+[^>]*?src="(?<src>[^">]+)"/i;
var match = reg.exec(html);
console.log(match[1]); // "https://www.baidu.com/img/bd_logo1.png"

在上面的代码中,我们定义了一个名为src的命名分组,它匹配了HTML代码中的img标签中的src属性。具体来说,我们使用了]?src="[^">]+"这样一个表达式来匹配HTML中的img标签,其中]?表示匹配img标签中的其他部分(但是不匹配属性部分),src="[^">]+"表示匹配img标签中的src属性及其值。最后,我们使用exec方法获取匹配对象,并通过名称为src的属性来获取命名分组中匹配到的内容。因此,该示例可以成功提取出img标签中的src属性,即图像的URL。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS正则表达式获取分组内容的方法详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node.js中http模块和url模块的简单介绍

    下面是关于node.js中http模块和url模块的简单介绍: http模块简介 http模块是Node.js中的内置模块,提供了创建HTTP服务器和HTTP客户端的工具。可以用它发送HTTP请求、接收HTTP响应以及创建HTTP服务器和客户端。 创建一个简单的HTTP服务器 下面是创建一个简单的HTTP服务器的示例代码: const http = requ…

    node js 2023年6月8日
    00
  • StringUtils工具包中字符串非空判断isNotEmpty和isNotBlank的区别

    StringUtils工具包是Apache Commons Lang中提供的一个字符串处理工具类库。其中,isNotEmpty和isNotBlank是用来判断字符串是否为空的两个方法,它们的区别如下: isNotEmpty isNotEmpty方法用于判断字符串是否不为空,不为空的条件是字符串不为null且长度大于0。 StringUtils.isNotEm…

    node js 2023年6月8日
    00
  • node.js正则表达式获取网页中所有链接的代码实例

    实现获取网页中所有链接的功能,可以使用Node.js正则表达式进行匹配。以下是实现的完整攻略: 获取网页内容 首先,我们需要使用Node.js的HTTP模块获取要匹配的网页的内容。可以使用以下代码实现: const http = require(‘http’); const url = ‘http://example.com’; http.get(url, …

    node js 2023年6月8日
    00
  • 用npm-run实现自动化任务的方法示例

    使用npm-run可以在package.json文件中定义自动化任务,方便开发者执行常用操作,例如编译代码、运行测试等。下面是通过npm-run实现自动化任务的方法示例: 1. 在package.json中定义自动化任务 在package.json文件中添加”scripts”属性,使用该属性定义自动化任务的名称和命令。例如: { "name&quo…

    node js 2023年6月8日
    00
  • 深入探讨javascript函数式编程

    深入探讨Javascript函数式编程 Javascript 函数式编程是一种将函数作为主要构建块的编程范式。与传统的命令式编程不同,函数式编程通过组合函数来完成任务,这使得代码更加简洁、模块化和易于测试。本篇文章将深入探讨Javascript函数式编程的一些关键概念以及如何在实践中应用它们。 函数式编程的核心概念 纯函数 Javascript 中的纯函数是…

    node js 2023年6月8日
    00
  • node.js下when.js 的异步编程实践

    Node.js下的异步编程模型是该平台的一大特点,但面对复杂的异步代码实现却造成了非常大的困难。为了解决这个问题,许多异步编程库被开发出来。其中,when.js 是一个高效的 Promise/A+ compliant 的库,允许 Node.js 开发人员用更优雅和精简的代码来解决异步代码的问题。下面,我将分享一份when.js的异步编程实践攻略。 when.…

    node js 2023年6月8日
    00
  • node打造微信个人号机器人的方法示例

    以下是“node打造微信个人号机器人的方法示例”的完整攻略。 1. 认识微信个人号机器人 微信个人号机器人,是指通过编写程序,让微信个人号能够自动化地进行某些操作或提供某些服务,从而达到自动化处理的效果。常见的微信个人号机器人实现方式有网页版微信、itchat等。 2. 准备工作 在开始编写微信个人号机器人之前,需要完成以下准备工作: 微信个人号。如果暂时没…

    node js 2023年6月8日
    00
  • ESLint和Jest中使用esm示例详解

    ESLint和Jest中使用esm示例详解 简介 ESLint是一个开源的JavaScript代码检查工具,它的目标是保证代码的一致性和避免错误。ESLint支持插件,我们可以使用它来编写自定义规则,以便强制执行代码的有效性和可读性。 Jest是一个流行的JavaScript测试框架,可用于测试React、Vue等前端框架以及Node.js应用程序等等,其功…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部