理解javascript正则表达式

yizhihongxing

理解JavaScript正则表达式攻略

什么是正则表达式

正则表达式是用来匹配字符串中符合某种规则的子串的表达式,常用于文本处理、数据提取、验证等场景。在JavaScript中,正则表达式可以通过RegExp对象来创建。

创建正则表达式

可以使用RegExp构造函数或正则表达式字面量语法来创建正则表达式。

使用RegExp构造函数

RegExp构造函数接收两个参数,第一个参数是要匹配的正则表达式字符串,第二个参数是可选的标志。

let reg = new RegExp("abc", "g");

使用正则表达式字面量

正则表达式字面量语法使用反斜杠(/)表示正则表达式的开始和结束。

let reg = /abc/g;

正则表达式的标志

创建正则表达式时可以指定标志,共包括6个可选的标志。下面是它们的含义:

  • g 全局匹配(匹配所有符合规则的子串,默认只匹配第一个)
  • i 忽略大小写
  • m 多行匹配(正则表达式字符串的边界可以出现在多行文本的开头或结尾)
  • u Unicode匹配模式,开启 Unicode 支持
  • s dotAll模式,使 . 匹配任意字符,包括换行符
  • y 粘连模式,相当于只匹配 lastIndex 指针指向的位置

可以在正则表达式的字面量或者RegExp构造函数的第二个参数位置设置标志。

let reg1 = /abc/gi;
let reg2 = new RegExp("abc", "gm");

元字符和元字符类

正则表达式中的元字符指具有特殊意义的字符,除了元字符外,其他字符都是字面量,表示匹配这个字符本身。下面是常见的元字符列表:

  • . 匹配任何除换行符(\n、\r、\u2028 或 \u2029)以外的单个字符。
  • \w 匹配任何字母数字。
  • \W 匹配任何非字母数字字符。
  • \d 匹配任何数字。
  • \D 匹配任何非数字字符。
  • \s 匹配任何空白字符,包括空格、制表符、换行符等。
  • \S 匹配任何非空白字符。
  • ^ 匹配字符串的开头。
  • $ 匹配字符串的结尾。
  • * 匹配前面的元素零次或多次。
  • + 匹配前面的元素一次或多次。
  • ? 匹配前面的元素零次或一次。
  • {n} 匹配前面的元素恰好出现n次。
  • {n,} 匹配前面的元素至少出现n次。
  • {n,m} 匹配前面的元素至少出现n次,最多出现m次。

集合

集合是匹配一个集合中的任意一个字符,常用于匹配多个字符中的一个。

  • [] 中括号内的任意字符都将匹配。
let reg = /[abc]/g  // 匹配任何字符为a、b、c的字符串
  • [-] 中括号内的 a-z 表示匹配字符a到z之间的所有字符。同样可以使用数字、大写字母等。
let reg = /[0-9]/g  // 匹配任何数字字符

量词

量词用于限制元字符、字符集、分组、反向引用的匹配次数。

  • * 匹配前面的元素零次或多次。
  • + 匹配前面的元素一次或多次。
  • ? 匹配前面的元素零次或一次。
  • {n} 匹配前面的元素恰好出现 n 次。
  • {n,} 匹配前面的元素至少出现 n 次。
  • {n,m} 匹配前面的元素至少出现 n 次,最多出现 m 次。
let reg = /go{2,3}gle/i;     // 匹配gogole或googole

分组和反向引用

使用分组可以将一些字符组成一个整体,并对这个整体进行操作,常用的操作有限定次数、分别应用量词和后向引用。后向引用是通过序号\n引用前面的分组,实现匹配某个确定的分组。

let reg = /(go)+/i;      // 匹配go或gogogo等
let reg1 = /(\d{4})-(\d{2})-(\d{2})/;    // 匹配日期格式,如:2021-08-16
let str = "2014-01-28";
let arr = reg1.exec(str);
console.log(arr[0]);    // 2014-01-28
console.log(arr[1]);    // 2014
console.log(arr[2]);    // 01
console.log(arr[3]);    // 28

// 替换成 “$2/$3/$1”
let result = str.replace(reg1, "$2/$3/$1");
console.log(result);    // 01/28/2014

示例

以下是使用正则表达式进行字符串匹配的一些示例:

验证邮箱格式是否正确

function isEmail(str) {
  let reg = /^[a-z0-9]+([_\.-][a-z0-9]+)*@[a-z0-9]+(\.[a-z0-9]+)*\.[a-z]{2,5}$/i;
  return reg.test(str);
}

console.log(isEmail("test@example.com"));    // true
console.log(isEmail("test-123@example.com"));    // true
console.log(isEmail("example.com"));    // false

验证手机号格式是否正确

function isPhone(str) {
  let reg = /^1[3456789]\d{9}$/;
  return reg.test(str);
}

console.log(isPhone("17812345678"));    // true
console.log(isPhone("21211111111"));    // false

总结

以上就是对JavaScript正则表达式的详细讲解。学习正则表达式需要不断练习和尝试,才能更好地掌握相关知识。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:理解javascript正则表达式 - Python技术站

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

相关文章

  • 递归删除一个节点以及该节点下的所有节点示例

    递归删除一个节点以及该节点下的所有节点是一种常见的树操作。下面我将详细讲解如何实现这个过程。 1. 准备工作 在进行删除操作之前,我们需要先了解一下树的基本结构和节点表示方法。在树的结构中,每个节点包含一个数据元素和若干指向其子节点的指针。我们可以用一个指向根节点的指针来访问一棵树,并通过子节点指针遍历整个树。 2. 实现递归删除 下面,我们将详细讲解如何实…

    other 2023年6月27日
    00
  • JavaScript实现判断图片是否加载完成的3种方法整理

    下面是详细讲解“JavaScript实现判断图片是否加载完成的3种方法整理”的攻略。 前言 在前端开发中,图片加载是个很常见的问题。有时候我们需要在图片加载完成后执行某个操作,或者需要知道图片是否加载出错。那么如何在JavaScript中实现这个功能呢?这篇文章将介绍3种实现方法,并进行详细讲解。 方法一:onload事件 可以通过给img元素绑定onloa…

    other 2023年6月25日
    00
  • Windbg Extension NetExt 使用指南 【1】 — NetExt 介绍

    Windbg Extension NetExt 使用指南 【1】 — NetExt 介绍 简介 NetExt 是 Windbg Extension 工具集中的一款插件,主要用于 .NET 应用程序的诊断和调试。它提供了一系列的命令和对象扩展,能够帮助开发人员更方便快捷地分析和调试 .NET 应用程序。 功能 NetExt 提供了以下功能:- 显示托管堆的…

    其他 2023年3月28日
    00
  • c语言版本二叉树基本操作示例(先序 递归 非递归)

    C语言版本二叉树基本操作示例(先序 递归 非递归) 二叉树是一种重要的数据结构,用于组织和存储数据。C语言是一种常用的编程语言,具有许多优秀的二叉树操作库。本文将介绍C语言版本二叉树的基本操作示例,包括先序遍历的递归和非递归实现。 先序遍历的递归实现 先序遍历是指从根节点开始遍历,先输出根节点,然后递归遍历左子树和右子树。该算法可以简单地通过递归函数来实现。…

    other 2023年6月27日
    00
  • Ruby 面向对象知识总结

    以下是关于Ruby面向对象知识的详细攻略: 类和对象 在Ruby中,使用class关键字定义一个类,并使用new方法创建一个对象。 class Person def initialize(name) @name = name end def say_hello puts \"Hello, #{@name}!\" end end perso…

    other 2023年10月17日
    00
  • Win11 KB5027305发布:Beta版本升至 22621.1835/22631.1835

    Win11 KB5027305发布:Beta版本升至 22621.1835/22631.1835攻略 Win11 KB5027305是Windows 11操作系统的一个重要更新,它将Beta版本升级至22621.1835/22631.1835。本攻略将详细介绍如何完成这个升级过程。 步骤一:检查更新 首先,确保你的计算机已连接到互联网。然后按照以下步骤检查更…

    other 2023年8月3日
    00
  • IDEA无法打开Marketplace的三种解决方案(推荐)

    下面是详细的攻略: IDEA无法打开Marketplace的三种解决方案(推荐) 问题描述 当使用 IntelliJ IDEA 打开 Marketplace 时,有可能会出现以下错误: Plugin repository connect failed: Connection refused: connect 这意味着无法连接到插件仓库,这将导致无法搜索或安装…

    other 2023年6月26日
    00
  • oracle定义变量

    在Oracle中定义变量是一种常见的操作,它可以帮助我们在SQL语句中使用变量,从而提高SQL语句的灵活性和可重用性。本文将介绍如何在Oracle中定义变量,并提供两个示例说明。 步骤1:定义变量 在Oracle中定义变量,可以使用DECLARE语句。例如,要定义一个名为my_var的变量,可以使用以下代码: DECLARE my_var NUMBER; B…

    other 2023年5月6日
    00
合作推广
合作推广
分享本页
返回顶部