ES6之正则扩展

  • 正则表达式扩展
    • u修饰符(Unicode模式)
    • y修饰符(Sticky或粘连模式)
    • s修饰符(dotAll模式)
    • Unicode属性转义
    • 正则实例的flags属性
    • 字符串方法与正则表达式的整合
  • javascript的常用的正则表达式
    • 验证数字
    • 邮箱验证
    • 手机号码验证
    • 身份证号码验证
    • URL验证
  • javascript的正则表达式的匹配符有哪些?
    • 点.
    • 脱字符^
    • 美元符号$
    • 方括号[]
    • **反斜杠**:
    • 星号*:
    • 加号+
    • 问号?
    • 花括号{}
    • 竖线|
    • 圆括号
    • 反斜杠后面跟特殊字符
    • 先行断言?=…否定先行断言?!..
    • 后行断言?<=…否定后行断言?<!..
    • i、g、m、u、y、s修饰符

1. 正则表达式扩展

ES6对正则表达式进行了多方面的扩展,以下是一些关键的扩展点及其示例:

1.1. u修饰符(Unicode模式)

  • 功能: 用于正确处理大于\uFFFF的Unicode字符,即正确处理四个字节的UTF-16编码。启用此模式后,正则表达式能够识别并正确匹配Unicode字符,避免将多字节字符识别为多个字符。
  • 示例:
const regex = /\u{1F600}/u; // 匹配笑脸表情符号 😄
console.log(regex.test('😄')); // 输出: true

1.2. y修饰符(Sticky或粘连模式)

  • 功能: 类似于g修饰符的全局匹配,但要求每次匹配必须从上一次匹配结束的位置开始。如果上次匹配结束在字符串末尾,则下次匹配尝试会失败。
  • 示例:
const regex = /a/y;
const str = 'banana';
let match;
while ((match = regex.exec(str)) !== null) {console.log(match.index, match[0]);
}
// 输出: 1 a, 3 a, 5 a
// 注意,每次匹配都是从上一个'a'之后开始

1.3. s修饰符(dotAll模式)

  • 功能: 使得.可以匹配任意单个字符,包括换行符(\n)和回车符(\r),以往.不匹配换行符。
  • 示例:
const regex = /.+/s;
console.log(regex.test('line1\nline2')); // 输出: true
// 此处 '.' 能够匹配包括换行在内的任意字符

1.4. Unicode属性转义

  • 功能: 允许你根据Unicode字符的属性来匹配字符,如脚本类型、类别等。
  • 示例:
const regexGreekSymbol = /\p{Script=Greek}/u;
console.log(regexGreekSymbol.test('π')); // 输出: true
// 匹配任何属于希腊语脚本的字符

1.5. 正则实例的flags属性

  • 功能: 提供了一个读取正则表达式修饰符的方法。
  • 示例:
const regex = /abc/ig;
console.log(regex.flags); // 输出: 'gi'

1.6. 字符串方法与正则表达式的整合

  • 功能: ES6将原本字符串上的方法(如match()replace()search()split())调整为直接调用RegExp实例方法,增强了正则表达式与字符串操作的一致性和效率。
String.prototype.match 调用
RegExp.prototype[Symbol.match]
String.prototype.replace 调用
RegExp.prototype[Symbol.replace]
String.prototype.search 调用
RegExp.prototype[Symbol.search]
String.prototype.split 调用
RegExp.prototype[Symbol.split]

这些扩展增强了JavaScript正则表达式的功能,使其能更好地支持Unicode字符处理和提供了更灵活的匹配选项。

2. javascript的常用的正则表达式

JavaScript中常用的正则表达式广泛应用于文本验证、格式检查、数据提取等多种场景。下面列举几个典型的应用示例:

2.1. 验证数字

  • 用途: 检查输入是否为纯数字。
  • 正则表达式: ^\d+$
  • 示例:
let numRegex = /^\d+$/;
console.log(numRegex.test("123")); // 输出: true
console.log(numRegex.test("123abc")); // 输出: false

2.2. 邮箱验证

  • 用途: 验证电子邮件地址的格式是否正确。
  • 正则表达式: ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
  • 示例:
let emailRegex = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
console.log(emailRegex.test("example@example.com")); // 输出: true
console.log(emailRegex.test("not-an-email")); // 输出: false

2.3. 手机号码验证

  • 用途: 校验常见的中国大陆手机号格式。
  • 正则表达式: ^1[3-9]\d{9}$
  • 示例:
let phoneRegex = /^1[3-9]\d{9}$/;
console.log(phoneRegex.test("13812345678")); // 输出: true
console.log(phoneRegex.test("12801234567")); // 输出: false

2.4. 身份证号码验证

  • 用途: 简单验证中国大陆身份证号码。
  • 正则表达式: ^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\d{3}[\dxX]$
  • 示例:
let idCardRegex = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\d{3}[\dxX]$/;
console.log(idCardRegex.test("123456199001011234")); // 输出: true
console.log(idCardRegex.test("123456190001011234")); // 输出: false

2.5. URL验证

  • 用途: 检查字符串是否符合URL的格式。
  • 正则表达式: ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
  • 示例:
let urlRegex = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
console.log(urlRegex.test("https://www.example.com")); // 输出: true
console.log(urlRegex.test("not-a-url")); // 输出: false

正则表达式的复杂度可以根据验证需求的严格程度而有所不同。

3. javascript的正则表达式的匹配符有哪些?

JavaScript的正则表达式支持多种匹配符(也称作元字符或特殊字符),它们具有特殊的含义,用于构建复杂的匹配模式。以下是一些核心的匹配符及其简要说明:

3.1. 点(.)

匹配除换行符(\n)之外的任何单个字符。

3.2. 脱字符(^)

匹配字符串的开始位置,如果配合m修饰符(多行模式),也会匹配每一行的开始。

3.3. 美元符号($)

匹配字符串的结束位置,如果配合m修饰符,也会匹配每一行的结束。

3.4. 方括号([])

定义一个字符集,匹配其中的任意一个字符。例如,[abc]匹配"a"、“b"或"c”。

3.5. 反斜杠(\)

用于转义特殊字符,使其作为普通字符处理,或用于插入特殊序列,如\d匹配任何数字。

3.6. 星号(*)

匹配前面的子表达式零次或多次。

3.7. 加号(+)

匹配前面的子表达式一次或多次。

3.8. 问号(?)

匹配前面的子表达式零次或一次,或在非贪婪模式下使重复尽可能少。

3.9. 花括号({})

指定数量的重复次数。例如,a{3}匹配"aaa",a{2,4}匹配"aa"到"aaa"。

3.10. 竖线(|)

表示“或”,用于匹配两个或多个选择中的一个。例如,cat|dog匹配"cat"或"dog"。

3.11. 圆括号(())

用于定义捕获组,可以提取匹配的内容,也可以用于应用量词或使用特殊构造如后向引用。

3.12. 反斜杠后面跟特殊字符

\d匹配任何十进制数字,\s匹配任何空白字符,\w匹配任何字母数字字符等。

3.13. 先行断言((?=...))否定先行断言((?!...))

分别匹配后面跟有特定模式的位置,和后面不跟有特定模式的位置。

3.14. 后行断言((?<=...))否定后行断言((?<!...))

分别匹配前面跟有特定模式的位置,和前面不跟有特定模式的位置。(注意:这些特性并非所有环境都支持,但在ES2018中被引入了JavaScript。)

3.15. igmuys修饰符

这些不是操作符,而是正则表达式标志,用于改变匹配行为,如忽略大小写(i)、全局匹配(g)、多行模式(m)、Unicode模式(u)、粘连模式(y)和dotAll模式(s)。

这些匹配符构成了构建复杂正则表达式的基础,通过组合使用,可以实现对文本的精确匹配和提取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/701613.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 第三十一章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

TortoiseGit的安装

TortoiseSvn和TortoiseGit都是针对代码进行版本管理的工具&#xff0c;又俗称小乌龟&#xff0c;简洁而可视化的操作界面&#xff0c;免去繁琐的命令行输入。只需要记住常用的几个操作步骤就能快速上手。 TortoiseGit安装 1、TortoiseGit作为git的版本管理工具 &#xff0c;但…

零基础10 天入门 Web3之第3天

10 天入门 Web3之第3天 什么是以太坊&#xff0c;以太坊能做什么&#xff1f;Web3 是互联网的下一代&#xff0c;它将使人们拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术&#xff0c;该技术为安全、透明和可信的交易提供支持。我准备做一个 10 天的学习计划&…

粮油码垛机:自动化与智能化仓储的关键角色

在快速发展的现代化仓储物流领域&#xff0c;粮油码垛机正逐渐成为自动化与智能化仓储的关键角色。它以其高效、精准、节省人力的特点&#xff0c;赢得了众多粮油生产企业的青睐&#xff0c;成为仓储管理升级换代的明星产品。 一、粮油码垛机的技术革新 随着科技的发展&#…

【C语言】4.C语言数组(2)

文章目录 6. 二维数组的创建6.1 ⼆维数组的概念6.2 ⼆维数组的创建 7. 二维数组的初始化7.1 不完全初始化7.2 完全初始化7.3 按照⾏初始化7.4 初始化时省略⾏&#xff0c;但是不能省略列 8. 二维数组的使用8.1 ⼆维数组的下标8.2 ⼆维数组的输⼊和输出 9. 二维数组在内存中的存…

string功能介绍(普及版)

目录 1。初始化&#xff08;好几种方式&#xff09;&#xff0c;npos和string的使用说明 2。string的拷贝&#xff0c;隐式类型转换&#xff0c;[]&#xff0c;size&#xff0c;iterator&#xff0c;begin&#xff0c;end&#xff0c;reverse&#xff0c;reverse_iterator&am…

网络安全快速入门(十二)(下) 目录结构相关命令补充

12.4 补充命令 我们已经了解了linux的目录结构&#xff0c;接下来我们大概看一下针对目录及文件的一些相关命令&#xff0c; 我们本章只讲三个目录及文件相关的命令&#xff0c;分别是tree&#xff0c;find及校验文件命令&#xff0c;我们一个一个来看这些命令。 12.4.1 tree命…

Leetcode2105. 给植物浇水 II

Every day a Leetcode 题目来源&#xff1a;2105. 给植物浇水 II 解法1&#xff1a;双指针 设 Alice 当前下标为 i&#xff0c;初始化为 0&#xff0c;水量为 a&#xff0c;初始化为 capacityA&#xff1b;Bob 当前下标为 j&#xff0c;初始化为 n-1&#xff0c;水量为 b&am…

【AI】DeepStream(03):deepstream_test1_app

1、简介 deepstream-test1:演示各种 DeepStream 插件构建 GStreamer 管道。从文件中获取视频、解码、批处理,然后进行对象检测,最后在屏幕上渲染框。 源码路径:/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1 先看下效果 2、编译 1)…

Pytorch读取自己的数据集

数据集 流程图 导包设置tfs创建datasets.ImageFolder创建torch.utils.data.DataLoader() import time import os from tqdm import tqdm import pandas as pd import numpy as np import torch import torchvision import torch.nn as nn import torch.nn.functional as F im…

随机梯度算法应用动画场景

https://github.com/lilipads/gradient_descent_viz #include <math.h> #include <iostream> namespace Function { enum FunctionName { local_minimum, // 许多小坑 global_minimum, // 大坑 saddle_point, // 起伏山路 …

基于GWO灰狼优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 GRU网络 4.3 注意力机制&#xff08;Attention&#xff09; 4.4 GWO优化 5.算法完整程序工程 1.算法运行效果图预览…