理解javascript正则表达式

理解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日

相关文章

  • 使用spring.profiles.active来分区配置的方法示例

    使用 spring.profiles.active 配置不同环境的方法示例如下: 在 application.yml 或者 application.properties 中添加不同环境的配置 “` 开发环境配置 spring: profiles: active: dev server: port: 8080 生产环境配置 spring: profiles:…

    other 2023年6月27日
    00
  • python读取多层嵌套文件夹中的文件实例

    Python读取多层嵌套文件夹中的文件实例 在Python中,我们可以使用os模块和递归函数来读取多层嵌套文件夹中的文件。下面是一个完整的攻略,包含了两个示例说明。 步骤1:导入必要的模块 首先,我们需要导入os模块,它提供了与操作系统交互的功能。 import os 步骤2:定义递归函数 接下来,我们需要定义一个递归函数,该函数将遍历文件夹中的所有文件和子…

    other 2023年7月27日
    00
  • c#控件之combobox控件使用

    C#控件之ComboBox控件使用 什么是ComboBox控件? ComboBox控件是C#中常用的用户界面控件之一,一般用于下拉式菜单的实现。该控件可供用户选择一个或多个选项。 ComboBox控件的使用 1. 添加ComboBox控件 在Visual Studio中添加一个ComboBox控件有多种方法,以下我将介绍两种方式。 方法一:拖曳添加 打开Vi…

    其他 2023年3月29日
    00
  • Android实战教程第五篇之一键锁屏应用

    下面是Android实战教程第五篇之一键锁屏应用的完整攻略。 一、概述 一键锁屏应用是一款实用的工具类应用,能够帮助用户快速地锁定手机,保护用户的隐私安全。本文将详细讲解如何使用Android Studio开发一键锁屏应用。 二、准备工作 在开始开发一键锁屏应用之前,需要进行一些准备工作: 下载并安装最新版的Android Studio,配置好相关环境。 创…

    other 2023年6月26日
    00
  • win7系统打开浏览器internet选项提示计算机受到限制本次操作已被取消的多种解决方法

    解决“win7系统打开浏览器internet选项提示计算机受到限制本次操作已被取消”的方法攻略 如果在Windows 7系统下打开浏览器Internet选项时,提示“计算机受到限制,本次操作已被取消”的错误信息,说明当前用户没有足够的权限进行修改或操作。 以下是解决这个问题的几种方法,根据实际情况选择合适的方法。 方法一:以管理员身份运行浏览器 以管理员身份…

    other 2023年6月27日
    00
  • xml文件怎么打开

    XML是一种标准的数据交换格式,可以用于表示各种类型的数据。本文将详细讲解如何打开XML文件,包括在Windows、Mac和Linux操作系统中使用的方法。 在Windows中打开XML文件 在Windows中打开XML文件,你可以使用以下两种方法: 方法1:使用文本编辑器 右键单击XML文件并选择“编辑”或“打开方式”选项; 选择“记事本”、“Notepa…

    其他 2023年4月16日
    00
  • Android自定义日历控件实例详解

    下面是关于“Android自定义日历控件实例详解”的完整攻略。 1. 简介 该攻略主要讲解如何使用自定义控件实现日历功能。本攻略将从以下几个方面进行详细说明:- 编写自定义日历控件的思路和基本实现- 日历控件的样式自定义(如字体颜色、背景颜色等)- 日历控件的基本使用 2. 编写自定义日历控件 2.1 实现思路 日历控件的实现思路是:先确定需要显示的月份,并…

    other 2023年6月26日
    00
  • Python尾递归优化实现代码及原理详解

    Python尾递归优化实现代码及原理详解 什么是尾递归 递归是计算机编程中常用的一种算法。在递归中,函数在调用自身之前会执行一些操作。递归调用链会在一定条件下结束,如达到了某个递归深度,或者某个函数返回了终止条件。 尾递归是一种特殊的递归形式,即函数的最后一个操作是它的递归调用。在尾递归中,递归调用不会造成新的堆栈空间,它会用当前的堆栈替换掉调用它的堆栈(这…

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