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.mzph.cn/news/837850.shtml

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

相关文章

C语言中的循环队列与栈、队列之间的转换实现

引言 在数据结构的学习中&#xff0c;栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;是两个非常重要的概念。它们分别遵循着后进先出&#xff08;LIFO&#xff09;和先进先出&#xff08;FIFO&#xff09;的原则。在某些情况下&#xff0c;我们可能需要…

C++——超简单登录项目

程序入口文件 #include <QtWidgets/QApplication> // 包含登录页面头文件 #include "DlgLogin.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);// 程序入口// 调页面起来//DlgMain w;//w.show();// 换成登录页面DlgLogin w;w.show();return…

开源禅道zentao的使用

很不幸禅道因为漏洞被人进攻了&#xff0c;被迫研究。 1.安装 直接使用docker进行部署&#xff0c;这里有非常多门道。官网的镜像easysoft-zentao是属于docker安装&#xff0c;而idoop的镜像虽然也是docker安装&#xff0c;但是实际是使用官网linux一键安装的版本&#xff0c…

一周学习总结:数组与链表

学习内容&#xff1a;数组与链表、计算机网络知识 数组&#xff1a; 从数组的基础知识到相关应用 数组的基础知识&#xff1a;数组在内存中的存储、数组的相关操作&#xff08;获取与更新&#xff09;、数组的相关应用&#xff1a; 二分查找法⭐⭐⭐⭐⭐ ● 掌握左闭右闭的…

2024第16届四川教育后勤装备展6月1日举办 欢迎参观

2024第16届四川教育后勤装备展6月1日举办 欢迎参观 邀请函 主办单位&#xff1a; 中国西部教体融合博览会组委会 承办单位&#xff1a;重庆港华展览有限公司 博览会主题&#xff1a;责任教育 科教兴邦 组委会&#xff1a;交易会159交易会2351交易会9466 展会背景 成都…

Chatgpt教你使用Python开发iPhone风格计算器

上次使用Chatgpt写爬虫&#xff0c;虽然写出来的代码很多需要修改后才能运行&#xff0c;但Chatgpt提供的思路和框架都是没问题。 这次让Chatgpt写一写GUI程序&#xff0c;也就是你常看到的桌面图形程序。 由于第一次测试&#xff0c;就来个简单点的&#xff0c;用Python写用…

GPU Burn测试指导

工具下载链接&#xff1a; https://codeload.github.com/wilicc/gpu-burn/zip/master测试方法&#xff1a; 上传工具到操作系统下&#xff0c;解压缩工具&#xff0c;使用make命令完成编译&#xff08;确保cuda环境变量已经配置成功、 nvcc -v能显示结果&#xff09;。 如果安…

文献速递:多模态深度学习在医疗中的应用--多模式婴儿脑分割技术:模糊引导深度学习

Title 题目 Multimodal Infant Brain Segmentation by Fuzzy-informed Deep Learning 多模式婴儿脑分割技术&#xff1a;模糊引导深度学习 01 文献速递介绍 日益普及的非侵入式婴儿脑磁共振图像&#xff08;MRI&#xff09;为准确理解脑主要发展轨迹的动态性提供了机会&…

树莓派|串口通信协议

1、串口通信原理 串口通讯(Serial Communication)&#xff0c;是指外设和计算机间&#xff0c;通过数据信号线、地线等&#xff0c;按位进行传输数据的一种通讯方式。串口是一种接口标准&#xff0c;它规定了接口的电气标准&#xff0c;没有规定接口插件电缆以及使用的协议。串…

“ModuleNotFoundError: No module named ‘selenium‘”报错如何解决

接上节&#xff1a;测试平台开发之测试框架改造并发执行及结果隔离(1) 上节博客的末尾提到&#xff1a;在命令窗口执行python main.py 可是执行的时候遇到了如下报错&#xff1a; ERRORS _____________________________________________________________ ERROR collecting te…

如何安全高效地进行4S店文件分发,保护核心资产?

4S店与总部之间的文件分发是确保双方沟通顺畅、信息共享和决策支持的重要环节。4S店文件分发涉及到以下文件类型&#xff1a; 销售报告&#xff1a;4S店需要定期向总部提交销售报告&#xff0c;包括销售数量、销售额、市场份额等关键指标。 库存管理文件&#xff1a;包括车辆库…

使用docker创建hadoop集群:Couldn‘t upload the file

运行的环境; Windows10 Docker Desktopdocker-hadoop 出现的问题如下: 解决方法 https://github.com/big-data-europe/docker-hadoop/issues/98

Unity Pixels Per Unit 与 Sprite Renderer Scale的逻辑关系,为什么平铺的Sprite Renderer会变形?

SpriteRenderer之前用的比较基础&#xff0c;没遇到过什么问题&#xff0c;这几天使用SpriteRenderer的平铺时发现平铺变形了&#xff0c;研究了一下&#xff0c;原来有这么多在逻辑在里面。 当我们导入图片选择Texture Type为Sprite时表示我们的图片用途是UI或者SpriteRendere…

【go项目01_学习记录12】

代码组织 1 代码结构2 重构与测试2.1 安装测试功能2.2 testify 的常用断言函数 3 表组测试 1 代码结构 所有的代码写在一个main.go文件里面&#xff0c;GO编译器也是可以正常执行的。但是当代码量很庞大时&#xff0c;很难进行维护。 Go Web 程序的代码组织 单文件——反模式…

C语言笔记15

指针2 1.数组名的理解 int arr[ 10 ] { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }; int *p &arr[ 0 ];17391692786 arr是数组名&#xff0c;数组名是首元素地址&#xff0c;&arr[0]就是取出首元素的地址放在指针变量p中。 #include <stdio.h> int main()…

基于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.算法运行效果图预览…

ChatGlm的部署和训练

一、chatGlm的环境部署 1.安装anocoda 下载安装anaconda。具体教程详见官网教程。 2.安装CUDA 1&#xff09;首先在终端查看你的Nividian版本&#xff0c;命令如下&#xff1a; 2)如果你没有下载你要去下载cuda下载网站&#xff0c;这里是12.3是因为我cuda version版本12…

【保姆级】生成式网络模型基础知识(图像合成/语音合成/GPT)

生成式模型基础知识 初步接触生成任务 生成任务&#xff0c;顾名思义就是要去生成一个东西&#xff0c;比如生成图片/音频/文字等等。 大家接触最多比如chatGPT、stable diffusion、还有一些语音合成相关的东西。 那么问题来了&#xff0c;具体生成步骤是什么样的&#xff…

【计算机毕业设计】基于SSM++jsp的高校专业信息管理系统【源码+lw+部署文档+讲解】

目录 第1章 绪论 1.1 课题背景 1.2 课题意义 1.3 研究内容 第2章 开发环境与技术 2.1 MYSQL数据库 2.2 JSP技术 2.3 SSM框架 第3章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删除信息流…

ChatGPT-4o发布了,所有人都可以免费用

前言 美国时间 5 月 13 日&#xff0c;在 Sam Altman 缺席的情况下&#xff08;为什么缺席&#xff0c;猜测是可能后面还有更重磅的消息&#xff0c;这次的产品只是一个中间过渡产品&#xff09;&#xff0c;OpenAI CTO Mira Murati 介绍了新的 ChatGPT 产品 ChatGPT-4o。这个…