RegExp 对象

news2025/1/20 0:54:03

文章目录

  • RegExp 对象
      • 创建RegExp对象
      • 正则表达式语法
      • RegExp 对象方法
      • 支持正则表达式的 String 对象的方法
      • RegExp.prototype[@@search]()
      • replace() 方法
      • match()
      • 常用正则表达式


RegExp 对象

  • ·RegExp·对象表示正则表达式,是由普通字符和特殊字符(也叫元字符或限定符)组成的文字模板
  • 用途:对字符串执行模式匹配

创建RegExp对象


构造函数

var 变量 = new RegExp("正则表达式","匹配模式");

字面量

var 变量 = /正则表达式/匹配模式;

使用·typeof·检查正则对象,会返回·object·

正则表达式语法


匹配模式

  • g:global 全局匹配
  • i :ignore case 忽略大小写匹配
  • m : multiple lines 多行匹配

基本元字符

  • . : 任何单个字符(除了换行和行结束符)
  • \ : 转义字符,表示后一个字符不能从字面上解释
  • | : 或
  • [] : 定义一个字符集合,匹配字符集合中的任意字符,/[abc]/- 等价于/a|b|c/
  • [^] : 对上面一个集合取非
  • - : 定义一个区间
表达式描述
[abc]查找方括号之间的任何字符。
[^abc]查找任何不在方括号之间的字符。
[0-9]查找任何从 0 至 9 的数字。
[a-z]查找任何从小写 a 到小写 z 的字符。
[A-Z]查找任何从大写 A 到大写 Z 的字符。
[A-z]查找任何从大写 A 到小写 z 的字符。
[adgk]查找给定集合内的任何字符。
[^adgk]查找给定集合外的任何字符。
(red|blue|green)查找任何指定的选项。

特殊元字符

元字符描述
.查找单个字符,除了换行和行结束符。
\w查找数字、字母及下划线。
\W查找非单词字符。
\d查找数字。
\D查找非数字字符。
\s查找空白字符。
\S查找非空白字符。
\b匹配单词边界。
\B匹配非单词边界。
\0查找 NULL 字符。
\n查找换行符。
\f查找换页符。
\r查找回车符。
\t查找制表符。
\v查找垂直制表符。
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。

量词和位置

表达式描述
[abc]查找方括号之间的任何字符。
[^abc]查找任何不在方括号之间的字符。
[0-9]查找任何从 0 至 9 的数字。
[a-z]查找任何从小写 a 到小写 z 的字符。
[A-Z]查找任何从大写 A 到大写 Z 的字符。
[A-z]查找任何从大写 A 到小写 z 的字符。
[adgk]查找给定集合内的任何字符。
[^adgk]查找给定集合外的任何字符。
(red|blue|green)查找任何指定的选项。

贪婪与懒惰(非贪婪)

正则表达式默认会匹配贪婪模式(尽可能多的匹配)。
在这里插入图片描述

RegExp 对象方法


exec()

参数

str:要匹配正则表达式的字符串。

返回值

  • 匹配成功,返回一个数组(包含额外的属性index和input),并更新正则表达式对象的lastIndex属性。
  • 匹配失败,返回null,并把lastIndex重置为0。
RegExpObject.exec(string);
var s = '_x_x';
var r = /_(x)/;

r.exec(s) // ["_x", "x"]

const reg = RegExp('foo*', 'g')
const str = 'table footable, foosball'
let arr

while (((arr = reg.exec(str)) !== null)) {
    console.log(`Found ${arr[0]}. Next starts at ${reg.lastIndex}.`)
}

//Found foo. Next starts at 9.
// Found foo. Next starts at 19.

RegExp.prototype.test()

  • 正则实例对象的test方法返回一个布尔值,表示当前模式是
  • 否能匹配参数字符串。
var r = /x/g;
var s = '_x_x';

r.lastIndex // 0
r.test(s) // true

r.lastIndex // 2
r.test(s) // true

r.lastIndex // 4
r.test(s) // false

支持正则表达式的 String 对象的方法


RegExp.prototype@@search

如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。

搜索第一个符合条件的字符串 search()

search()【只会查找第一个】——搜索字符串中是否含有指定内容。如果搜索到指定内容,则会返回第一次出现的索引;否则返回-1。

var x = 'hello world!'
// 可以search 字符串
console.log(x.search('hello'));   // 0  返回起始位置
// 也可以search  RegExp 对象
console.log(x.search(/hello/));   // 0  返回起始位置
console.log(x.search(/world/));   // 6

replace() 方法

  • replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
    语法
str.replace(regexp/substr,replacement)
  • 返回值:一个新的字符串
  • 设置全局标志 g,替换所有匹配子串。否则,只替换第一个匹配子串。
  • replacement 中的 $ 字符具有特定的含义。
let str1 = '2020/5/20'
console.log(str1.replace(/\//g,"-"));  //得到 2020-5-20
   
var str2 = "Today is fine day,today is fine day !!!"
console.log(str2.replace("today","tomorrow"));  //只能替换第一个today
console.log(str2.replace(/today/gi,"tomorrow")); //这里用到了正则,且为“全局匹配”模式,才能替换所有的today

过滤HTML标签

str.replace(/<.*?>/g, "") 

去除空格

str = str.replace(/^\s*/, ""); //去除开头的空格
 
str = str.replace(/\s*$/, ""); //去除结尾的空格

match()

找到一个或多个正则表达式的匹配。

str.match(regexp);
  • 返回值:存放匹配结果的数组。
  • 找到一个还是多个取决于全局标志g。
  • 返回指定的值,而不是字符串位置。

示例代码如下:

var str = "Hello World!";
var reg = /[a-g]/g;

document.write(reg.exec(str) + "<br>"); // 输出:e
document.write(reg.test(str) + "<br>"); // 输出:true
document.write(reg.toString() + "<br>"); // 输出:/[a-g]/g
document.write(str.search(reg) + "<br>"); // 输出:1
document.write(str.match(reg) + "<br>"); // 输出:e,d
document.write(str.matchAll(reg) + "<br>"); // 输出:[object RegExp String Iterator]
document.write(str.replace(reg, "+") + "<br>"); // 输出:H+llo Worl+!
document.write(str.split(reg) + "<br>"); // 输出:H,llo Worl,!

常用正则表达式


用户名

//用户名正则,4到16位(字母,数字,下划线,减号)
var uPattern = /^[a-zA-Z0-9_-]{4,16}$/;

非零数字(只能输入数字,但值不能为0,可以是00,01等)

/^([0]{2}|0[1-9]|[1-9])\d*$/

验证保留两位小数的正整数或0

/^([1-9]\d*|0)(\.\d{1,2})?$/

验证手机号码,如13908653654

手机号码 /^1[3456789]\d{9}$/
/^(1[3|5|7|8][0-9]{9})$/


function checkPhone(){ 
    var phone = document.getElementById('phone').value;
    if(!(/^1[3456789]\d{9}$/.test(phone))){ 
        alert("手机号码有误,请重填");  
        return false; 
    } 
}

url

var urlP= /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;

身份证

// 身份证正则表达式(15位)
isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
// 身份证正则表达式(18位)
isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
身份证正则合并:(^\d{15}$)|(^\d{17}([0-9]|X)$)

身份证

// 身份证正则表达式(15位)
isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
// 身份证正则表达式(18位)
isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
身份证正则合并:(^\d{15}$)|(^\d{17}([0-9]|X)$)

密码强度

//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;

整数

//正整数正则
var posPattern = /^\d+$/;
//负整数正则
var negPattern = /^-\d+$/;
//整数正则
var intPattern = /^-?\d+$/;

email

var ePattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

中文

var cnPattern = /[\u4E00-\u9FA5]/;

车牌号

var cPattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;

微信号

//微信号正则,6至20位,以字母开头,字母,数字,减号,下划线
var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;

日期

// 2020-01-20
var dP1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;

十六进制颜色

var cPattern = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;

原文链接:https://juejin.cn/post/6844903816781889543

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

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

相关文章

基于节点分层的配网潮流前推回代方法matlab程序(IEEE33节点潮流计算)

基于节点分层的配网潮流前推回代方法matlab程序&#xff08;IEEE33节点潮流计算&#xff09; 摘要&#xff1a;结合配电网特有的辐射状特点&#xff0c;提出了一种新的基于节点分层的配网潮流前推回代方法。该方法利用配网支路及其节点参数所形成的节点-节点关联矩阵推导出节点…

MiniAlphaGo黑白棋 蒙特卡洛搜索

做个笔记。 一、蒙特卡洛在黑白棋的应用 输入&#xff1a;棋盘&#x1d44f;&#x1d45c;&#x1d44e;&#x1d45f;&#x1d451;、当前执子方&#x1d450;&#x1d45c;&#x1d459;&#x1d45c;&#x1d45f;、搜索时间&#x1d461;&#x1d456;&#x1d45a;&#x…

小米平板5ProWIFI(elish)刷ArrowOS

文章目录警告下载奇兔刷机系统本体及Recovery清除数据刷入AospRec开始刷入警告完成设置输入法变砖头了qwq又是警告芝士截图Root方法结尾警告 此文章只针对 小米平板5Pro Wifi版本&#xff08;elish&#xff09; 由于条件限制&#xff0c;本文大部分无配图 请务必仔细认真阅读此…

Airflow用于ETL的四种基本运行模式, 2022-11-20

(2022.11.20 Sun) 基本运行模式(pattern)是data pipeline使用Airflow的DAG的不同结构&#xff0c;基本模式有如下四种 &#xff1a; 序列Sequence平行拆分Parallel split同步Synchronisation单选Exclusive choice 序列模式 序列模式即若干task按先后顺序依次执行&#xff0c;…

中远通在创业板IPO过会:前三季度收入11亿元,罗厚斌为董事长

近日&#xff0c;深圳证券交易所创业板披露的新显示&#xff0c;深圳市核达中远通电源技术股份有限公司&#xff08;下称“中远通”&#xff09;获得上市委会议通过。据贝多财经了解&#xff0c;中远通于2021年6月30日在创业板递交申请。 本次冲刺创业板上市&#xff0c;中远通…

以go rabbitmq为例子--用最少的时间最好的掌握消息队列

为什么要使用消息队列&#xff1f; 流量削峰 举个例子&#xff0c;如果订单系统最多能处理一万次订单&#xff0c;这个处理能力应付正常时段的下单时绰绰有余&#xff0c;正常时段我们下单一秒后就能返回结果。但是在高峰期&#xff0c;如果有两万次下单操作系统是处理不了的…

向QTableView单元格插入窗体小部件的功能实现

1.前言 我们知道&#xff1a;QTableWidget类有如下函数&#xff1a; void QTableWidget::setCellWidget(int row, int column, QWidget *widget) 可以实现在指定的单元格插入窗体部件QWidget对象&#xff0c;如下代码&#xff1a; setCellWidget(row, column, new QLineEdi…

2023年天津财经大学珠江学院专升本管理学原理专业考试大纲

天津财经大学珠江学院2023年高职升本科专业课考试《管理学原理》考试大纲一、本大纲系天津财经大学珠江学院2023年高职升本科《管理学原理》课程考试大纲。所列考试范围出自徐碧琳主编的教材《管理学原理&#xff08;第二版&#xff09;》&#xff0c;机械工业出版社&#xff0…

刨根问底 Kafka,面试过程真好使

大家好&#xff0c;这里是 菜农曰&#xff0c;欢迎来到我的频道。 充满寒气的互联网如何在面试中脱颖而出&#xff0c;平时积累很重要&#xff0c;八股文更不能少&#xff01;下面带来的这篇 Kafka 问答希望能够在你的 offer 上增添一把&#x1f525;。 Kafka最初是由Linkedin公…

【掌握K8S集群部署】手把手真正实现Kubernetes集群的配置与部署(附问题解决方法)

1、环境准备 IPHOSTNAME10.10.20.15k8s110.10.20.16k8s210.10.20.17k8s3 注意hostname不要用下划线、小数点与字母。 2、环境配置&#xff08;所有节点&#xff09; # stop firewalld systemctl stop firewalld systemctl disable firewalld# disable selinux sed -i s/enfo…

读 RocketMQ 源码,学习并发编程三大神器

笔者是 RocketMQ 的忠实粉丝&#xff0c;在阅读源码的过程中&#xff0c;学习到了很多编程技巧。 这篇文章&#xff0c;笔者结合 RocketMQ 源码&#xff0c;分享并发编程三大神器的相关知识点。 1 CountDownLatch 实现网络同步请求 CountDownLatch 是一个同步工具类&#xff…

高性能MySQL-创建高性能索引

什么是索引 MySQL并没有统一的索引标准&#xff0c;不同存储引擎的索引的工作方式并不一样&#xff0c;也不是所有的存储引擎都支持所有类型的索引。即使多个存储引擎支持同一种类型的索引&#xff0c;其底层的实现也可能不同。 索引是存储引擎用于快速找到记录的一种数据结构&…

LeetCode 图解 | 206.反转链表(附有知识点回顾)

206.反转链表题目描述思路分析递归方式代码实现迭代方式&#xff08;非递归&#xff09;代码实现知识点回顾题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 /*** Definition for singly-linked list.* public class ListNode {*…

AtCoder Beginner Contest 279 G. At Most 2 Colors(计数/组合数学/dp递推)

题目 n(2<n<1e6)个格子&#xff0c;从左到右一字排开&#xff0c; 现在需要给格子涂色&#xff0c;有c(1<c<1e9)种颜色&#xff0c; 要求连续的k(2<k<n)个格子的颜色数最多只有2种&#xff0c; 求方案数&#xff0c;答案对998244353取模 思路来源 TOYO…

3. HTML的语法规范

3. HTML的语法规范 3.1.2 注释的作用和写法 ➢ 注释的作用&#xff1a; ​ •为代码添加的具有解释性、描述性的信息&#xff0c;主要用来帮助开发人员理解代码 ​ •浏览器执行代码时会忽略所有的注释 ➢ 注释的快捷键&#xff1a; ​ • 在VS Code中&#xff1a;ctrl / 3.1.…

中国的LPR改革及其意义

中国的LPR改革及其意义 – 潘登同学的宏观经济学笔记 文章目录中国的LPR改革及其意义 -- 潘登同学的宏观经济学笔记LPR的两次改革为什么需要LPR改革LPR改革的意义LPR的两次改革 LPR&#xff1a;商业银行对其最优质的客户执行的贷款利率 LPR在我国经历了两次改革&#xff0c;一…

PyTorch中torch.gather()函数

一. torch.gather()函数 官方文档&#xff1a;torch.gather函数&#xff0c;定义&#xff1a;从原tensor中获取指定dim和指定index的数据。 看到这个核心定义&#xff0c;我们很容易想到gather()的基本想法其实就类似从完整数据中按索引取值般简单&#xff0c;比如下面从列表中…

Kafka - 07 Zookeeper中存储的 Kafka 信息

我们在前面的文章中搭建了 Kafka 集群&#xff0c;分别是伪集群和真实的集群&#xff1a; Kafka - 03 Kafka安装 | 单机环境搭建 | 伪集群环境搭建 (一台虚拟机) Kafka - 06 Kafka 集群环境搭建&#xff08;三台虚拟机&#xff09; 两种方式中&#xff0c;Zookeeper 存储的 …

微机-------8086/8088寻址方式

目录 8086/8088寻址方式8086/8088寻址方式 1、立即寻址 立即数只能作为源操作数 MOV AL,80H MOV AX,306AH2、寄存器寻址 8位操作数的寄存器可以是:AH、AL、BH、BL、CH、CL、DH、DL 16位操作数的寄存器可以是:

如何录制视频?有了这款视频录制软件,粉丝多了,转发量也起来了

一款好用的视频录制软件&#xff0c;可以为视频录制工作带来便捷&#xff0c;高效的解决如何录制视频的难题。视频经济时代&#xff0c;很多人都用视频录制软件来进行视频录制&#xff0c;并分享到社交平台。但是很多时候&#xff0c;往往是两极分化&#xff0c;有的人粉丝几百…