ES6之正则扩展

news2024/11/16 21:33:05
  • 正则表达式扩展
    • 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.coloradmin.cn/o/1677186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试 - CPU算力分配(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

string的模拟全实现

文章目录 &#x1f4dd;前言&#x1f320; string的基本要素&#x1f309;构造函数和析构函数&#x1f320;string()&#x1f309;string(const char* str ""); &#x1f320;~string()&#x1f309;深拷贝string(const string& s); &#x1f320;三个成员函数的…

外网ip地址怎么获取?快解析

大家都清楚互联网是通过ip地址通信的&#xff0c;ip地址又分内网ip和外网ip。内网ip只能在内网使用&#xff1b;而外网ip作为电脑唯一标识&#xff0c;可在公网使用。那么外网ip地址怎么获取呢&#xff1f; 外网ip是网络运营商分配给用户的。目前最常见的两种上网方式一个是拉…

金航标kinghelm萨科微slkor公司发展和品牌传播

为了金航标kinghelm萨科微slkor公司发展和品牌传播&#xff0c;推出了”金航标每日芯闻“与“萨科微每日芯闻“栏目&#xff0c;影响力非常好。这一构想并非一时的灵光乍现&#xff0c;而是经过深思熟虑和充分调研的结果。制定该栏目的模板时候时&#xff0c;就明确了要求语音版…

【nfs服务部署服务端和客户端搭建】

原理 NFS&#xff08;Network File System&#xff09;是文件服务器之一。它的功能是可以通过网络&#xff0c;让不同的机器、不同的操作系统可以彼此共享数据文件。 NFS服务器可以让服务端的共享目录挂载到本地端的文件系统中&#xff0c;其他服务器如果想访问共享目录&#…

windows 安装 Conda

1 Conda简介 Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。Conda 是为 Python 程序创建的&#xff0c;适用于 Linux&#xff0c;OS X 和Windows&#xff0c;也可以打包和分发其他软…

键盘和鼠标的隐形观察者:用Python的pynput库记录每一个动作

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 揭秘pynput&#xff1a;监控神器还是隐私威胁&#xff1f; 在数字时代&#xff0c;的每一次键盘敲击和鼠标点击都可能泄露信息。但如果能够控制这一过程&#xff0c;又将如何利用这些数据呢&#xff1f;Python的pyn…

“Linux”目录结构and配置网络

了解完命令格式和vi、vim编辑器后&#xff0c;我们来认识一下目录的结构&#xff1a; 一、目录 &#xff08;1&#xff09;目录的特点 windows特点&#xff1a; Windows中有C、D、E盘&#xff0c;每个都是一个根系统 Linux特点&#xff1a; linux中只有一个根&#xff08;单…

【opencv】opencv透视变换和ocr识别实验

实验环境&#xff1a;anaconda、jupyter notebook 实验用到的包opencv、numpy、matplotlib、tesseract 一、opencv透视变换 原图 图片是我拍的耳机说明书&#xff0c;哈哈哈哈&#xff0c;你也可以使用自己拍的照片&#xff0c;最好是英文内容&#xff0c;tesseract默认识别英…

C++|多态性与虚函数(2)|虚析构函数|重载函数|纯虚函数|抽象类

前言 看这篇之前&#xff0c;可以先看多态性与虚函数&#xff08;1&#xff09;⬇️ C|多态性与虚函数&#xff08;1&#xff09;功能绑定|向上转换类型|虚函数-CSDN博客https://blog.csdn.net/weixin_74197067/article/details/138861418?spm1001.2014.3001.5501这篇文章会…

Kasawaki川崎机器人故障维修

在当今的自动化工业领域&#xff0c;川崎工业机器人以其卓越的性能和可靠的工作效率赢得了广泛的赞誉。作为机器人的核心组成部分&#xff0c;伺服电机的作用至关重要。然而&#xff0c;就像所有机械设备一样&#xff0c;也可能会遭遇电机磨损或故障&#xff0c;需要适时的川崎…

二叉树——初解

二叉树 树树的概念树的性质 二叉树二叉树的概念二叉树的性质二叉树的实现方式数组构建左孩子右兄弟法构建指针构建 树 树的概念 在计算机科学中&#xff0c;树&#xff08;Tree&#xff09;是一种重要的非线性数据结构&#xff0c;它由若干节点&#xff08;Node&#xff09;组…

iPhone15销量不佳,新产品没希望,苹果开始寻找库克接班人

美国媒体开始谈论谁将成为苹果的新CEO&#xff0c;这意味着苹果董事会开始为库克寻找接班人了&#xff0c;导致如此结果&#xff0c;可能在于iPhone15的表现实在太差了&#xff0c;而库克力推的vision Pro等新产品又没有为苹果打开局面所致。 如今的苹果倒是与1980年代乔布斯离…

壹资源知识付费系统源码-小程序端+pc端

最新整理优化&#xff0c;含微信小程序和pc网页。内置几款主题&#xff0c;并且可以自己更改主题样式&#xff0c;各区块颜色&#xff0c;文字按钮等。 适用于知识付费类资源类行业。如&#xff1a;项目类&#xff0c;小吃技术类&#xff0c;图书类&#xff0c;考研资料类&…

Nodejs 第七十一章(libuv)

libuv 在Node.js中&#xff0c;libuv是作为其事件循环和异步I/O的核心组件而存在的。Node.js是构建在libuv之上的&#xff0c;它利用libuv来处理底层的异步操作&#xff0c;如文件I/O、网络通信和定时器等。 libuv在Node.js中扮演了以下几个重要角色&#xff1a; 事件循环&a…

同为科技详解智能PDU所应用的通信协议与接口

现如今&#xff0c;信息服务、AI人工智能的飞速发展与增长&#xff0c;全球正经历信息数据的爆炸。不仅数据量以惊人的速度增长&#xff0c;而且全球社会各行业对数据的依赖的程度也在日益增加。这些趋势使数据中心在全球都享有关键基础架构的地位。假设某个数据中心发生严重的…

写一个类ChatGPT应用,前后端数据交互有哪几种

❝ 对世界的态度&#xff0c;本质都是对自己的态度 ❞ 大家好&#xff0c;我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder 前言 最近&#xff0c;公司有一个AI项目&#xff0c;要做一个文档问答的AI产品。前端部分呢&#xff0c;还是「友好借鉴」Cha…

经典神经网络(8)GAN、CGAN、DCGAN、LSGAN及其在MNIST数据集上的应用

经典神经网络(8)GAN、CGAN、DCGAN、LSGAN及其在MNIST数据集上的应用 1 GAN的简述及其在MNIST数据集上的应用 GAN模型主导了生成式建模的前一个时代&#xff0c;但由于训练过程中的不稳定性&#xff0c;对GAN进行扩展需要仔细调整网络结构和训练考虑&#xff0c;因此GANs虽然在…

【js逆向】易车网JS逆向案例实战手把手教学(附完整代码)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…