(二)正则表达式——捕获

news2024/10/7 8:24:50

(二)正则表达式——捕获

正则捕获的懒惰性

实现正则捕获的方法:exec

exec返回的结果:

懒惰性

这就是正则捕获的懒惰性:默认只捕获第1个

lastIndex:下次匹配的开始位置

懒惰的原因:默认lastIndex的值不会改变,所以每次找都是从开始位置开始找,所以都只找到第1个。

解决正则的懒惰性:用全局g模式

手写execAll

let str=`baidu2019ali2020zhufeng2021peixun2022`
let reg=/(\d+)/g

reg.lastIndex=11;
console.log(reg.exec(str));


(function(){
    RegExp.prototype.execAll=function(str){
        let arr=[],res=this.exec(str);
        if(!this.global) return res;
        while(res){
            arr.push(res[0]);
            res=this.exec(str);
        }
        return arr.length?arr:null;

    }


    const reg=/\d+/g;
    const str=`baidu2019ali2020zhufeng2021peixun2022`
    console.log(reg.execAll(str));
})()


分组捕获和分组引用

非g模式

分组引用

\1:出现跟分组1一模一样的内容

取消贪婪性

当?出现在量词元字符后面,表示的是取消贪婪

let str=`look`
let reg=/([a-z])\1+/i
console.log(reg.exec(str));

str=`2019-12-23`
reg=/\d+?/g
console.log(reg.exec(str));

当出现在其他元字符后面,表示的是0-1次

?的五大作用

分组的3大作用:

  1. 改变优先级
  2. 捕获到匹配的内容
  3. 分组引用

其他能捕获到的方法

reg.test略

使用test方法,则需要用RegExp.$1 拿到捕获到的信息。

最多支持$1-$9

replace*

年月日

let str='2019-11-23'
let reg=/(?<=\d{4})-/
str=str.replace(reg,'年');
console.log(str);

str='2019-11-23'
reg=/^(\d{4})-(\d{2})-(\d{2})$/
// str=str.replace(reg,function(_,$1,$2,$3){
//     return `${$1}年${2}月${3}日`
// })
str=str.replace(reg,'$1年$2月$3日')
str=str.replace(reg,`$1年$2月$3日`)
console.log(str);

replace中通过$1 $2 直接拿到分组信息

单词首字母大写

let str=`Cybersecurity firm's  word-spell 'abc' Symantec says Dragonfly group has been`
let reg=/\b[a-z]+\b/gi
str=str.replace(reg,function(word){
    return word[0].toUpperCase()+word.slice(1)
})
console.log(str);




最多出现的字母

对象法(去重思路)

排序+正则法*

  1. 先排序
  2. 和前面一样:分组引用

!!!用正则很巧妙

  1. str.match

用正则:

当你不需要分组信息的时候,用str.match更方便

但是需要分组信息的时候,str.match则无法满足,需要循环reg.exec(replace等)

let str=`aghijijfeiswwwwaacvfefefeefeass`;
str=str.split('').sort((a,b)=>a.localeCompare(b)).join('')
console.log(str);
let reg=/([a-z])\1+/g
let arr=str.match(reg);
console.log(arr);
arr.sort((a,b)=>b.length-a.length);
console.log(arr);
let max=arr[0].length;
arr=arr.filter(str=>str.length===max);
console.log(arr);
arr=arr.map(i=>i[0])
console.log(`最多次数的字符是${arr.join('|')} 最多次数为${max}`)

次数+正则法*

let str=`aghijijfeiswwwwaacvfefefeefeass`;
str=str.split('').sort((a,b)=>a.localeCompare(b)).join('')
console.log(str);
let count=str.length,arr=[];
for(;count>0;count--){
    const reg=new RegExp(`([a-z])\\1{${count-1}}`,'g')
    arr=str.match(reg);
    if(arr){
        arr=arr.map(i=>i[0])
        break;
    }
}
console.log(`最多次数的字符是${arr.join('|')} 最多次数为${count}`)

其他做法

时间字符格式化

(function(){
    function format(template=`{0}年{1}月{2}日 {3}时{4}分{5}秒`){
        let date=this.match(/\d+/g);
        template=template.replace(/\{(\d+)\}/g,function(_,$1){
            const time=date[$1]
            time.length<2?`0${time}`:null;
            return time;

        })
        return template;
    }
    String.prototype.format=format;


    let str=`2019-7-21 18:25:39`
    str=str.format()
    console.log(str)
})()

queryURLParams

答案做得很简单

千分符*

正则解法:

正向预查:条件符合

负向预查:只要条件不符合

// 3位一个逗号
let num=567825612345;
let str=num+'';
console.log(str);
let reg=/\d(?=(\d{3})+(?!\d))/g
reg=/\d(?=(\d{3})+$)/g
str=str.replace(reg,(num)=>num+',')
console.log(str);

这里也有一段 断言 的正则

https://cdn.jsdelivr.net/gh/bobcn/hexo_resize_image.js@master/hexo_resize_image.js

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

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

相关文章

视频播放 (一) VideoView的使用

1. 配置参数 1.1 AndroidManifest.xml 文件添加网络权限 <uses-permission android:name"android.permission.INTERNET" /> 1.2 http 明文请求设置 android:usesCleartextTraffic"true" 1.3 activity 配置屏幕变化&#xff0c;不重新加载 Activity …

多数据中心多活相关知识

Cell&#xff1a;业务可封闭收敛最小执行分片&#xff1b;业务对请求空间按一定维度&#xff08;比如会员、门店等&#xff09;划分分片。 LDC&#xff1a;逻辑数据中心&#xff0c;是由多个业务可封闭 cell 组成的集合单元&#xff0c;拥有独立的基础中间件系统&#xff08;包…

树莓派4b通过docker安装部署jenkins

借鉴&#xff1a;https://blog.csdn.net/wz_coming/article/details/113523610 树莓派的docker安装及其他操作请看&#xff1a;https://blog.csdn.net/weixin_44578029/article/details/127987795 前言 我的环境是树莓派4b&#xff0c;安装的官方64 debian11系统 arm架构 4h…

[附源码]SSM计算机毕业设计疫情状态下病房管理平台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Kafka第一讲:应用场景及架构设计详解

本节是Kafka专题第一篇&#xff0c;主要介绍Kafka的发展历史、应用场景以及Kafka的基本架构&#xff0c;后续还会对Kafka的生产者、Broker、消费者、集群做详细讲解&#xff0c;敬请期待。 1.kafka的发展历史及应用场景 1.1kafka的定位 可以实现如下功能&#xff1a; 1.2为什…

『航班乘客满意度』场景数据分析建模与业务归因解释 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 机器学习实战系列&#xff1a;https://www.showmeai.tech/tutorials/41 &#x1f4d8; 本文地址&#xff1a;https://www.sho…

vue+elementUI实现级联表格el-table级联多选

vueelementUI实现级联表格el-table级联多选 <template><div id"app"><el-button type"primary" click"getAllSelect()">获取选中集合</el-button><el-table:data"renderDynamic"ref"lendontable"…

DataFun: 微信NLP算法微服务治理

管理问题 性能问题 PyInter&#xff1a;暂未开源&#xff0c;有开源打算 调度问题 P50&#xff1a; 响应的中位数P999&#xff1a;耗时最慢的千分之一 让p999下降为p50的1.5倍

DIY正则图片下载工具

一、初心&#xff1a;如果您擅长正则表达式&#xff0c;可以自定义抓取自定义网页的图片。 二、效果&#xff1a; 目前支持 <img>标签抓取图片正则。更多正则欢迎分项。支持base64图片预览。 三、使用方法&#xff1a; 修改正则表达式&#xff1a;选中即可。同时工具几…

Springboot毕业设计毕设作品,纯净水销售配送管理系统设计与实现

功能清单 在系统里面我们将纯净水的产品统称为商品 【后台管理员功能】 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 资讯分类&#…

基于Abaqus-Simpack联合仿真车辆-浮置板轨道耦合动力学仿真

作者&#xff1a; CAE兮枫如秋 仿真秀专栏作者 一、城市轨道交通中钢弹簧浮置板高级减振轨道 城市轨道交通不仅作为城市亮丽的名片&#xff0c;还在解决城市交通问题中具有特殊的地位和作用。城市轨道交通也是一种安全、快捷、准时、方便、舒适的理想交通工具。伴随着全世界各…

【MM小贴士】SAP创建成本中心采购订单带出默认会计科目和成本中心

在实施SAP项目梳理MM模块业务需求的时候&#xff0c;很多公司都会有这样需求&#xff0c;就是在创建成本中心采购订单的时候&#xff0c;因为成本中心和会计科目是必须输的&#xff0c;所以用户希望系统能够自动带出默认的会计科目和成本中心&#xff08;如下图&#xff09;。 …

14.前端笔记-CSS-浮动

1、传统网页布局的三种方式 网页布局的本质&#xff1a;用CSS摆放盒子 传统布局方式&#xff1a; - 普通流&#xff08;标准流&#xff09;- 浮动- 定位1.1 普通流&#xff08;文档流/标准流&#xff09; 就是标签按照规定好默认方式排列 &#xff08;1&#xff09;块级元素独…

项目前的知识回顾

杂谈 什么是框架 应用方面&#xff1a;框架是整个或者部分系统的可重用设计 目的方面&#xff1a;框架是可被开发者定制的应用骨架 统一的舞台&#xff0c;不同人表演不同的节目 框架解决什么问题 框架主要解决技术整合的问题 MYBATIS 什么是Mybatis Mybatis是一款半自动…

Ubuntu20.4安装QT6

前言&#xff1a; 本教程基于Ubuntu20.4&#xff0c;在Ubuntu22.4上也测试过。Ubuntu18.04由于GCC版本太低&#xff0c;无法正常工作。 1.下载QT安装程序&#xff1a; Open Source Development | Open Source License | Qt 2.安装libxcb-xinerama(必须在执行QT安装程序前执行…

多智能体(机器人)任务分配问题求解AssignmentProblem

问题提出&#xff1a; N个智能体&#xff0c;现在有个任务&#xff0c;就是让N个智能体要到N个目标位置&#xff0c;目标位置不能重复&#xff0c;目标位置与机器人一一对应&#xff0c;要使得期间所有所走的距离之和最短&#xff0c;求解最优任务分配。 问题抽象&#xff1a; …

关联分析——apprior算法

1.txt文件的打开与关闭 2.list的操作 3.字典的创建及保存 4.txt文件的创建与写入 输入&#xff1a; 结果&#xff1a; import os#input min_sup4 max_item[] data [] transaction[]curent_transaction,current_sup[],[] result_transaction,result_sup[],[]#Storage resul…

线索二叉树操作详解(详细图例+cpp实现+源码)

文章目录线索二叉树中序线索二叉树构造线索二叉树节点的线索化其他操作销毁二叉搜索树获取中序遍历的第一个节点获取中序遍历的最后一个节点输出中序遍历序列逆序输出中序遍历序列源码线索二叉树 线索二叉树又称为二叉树的线索化。 在一个具有n个节点的二叉树中&#xff0c;它…

Linux零基础入门(一)初识Linux

Linux零基础入门&#xff08;一&#xff09;初识Linux前言操作系统概述一 操作系统概述1 硬件和软件2 操作系统二 初识Linux1 Linux的诞生2 Linux内核3 Linux发行版三 虚拟机介绍1 虚拟机四 VMware WorkStation安装1 虚拟化软件五 在VMware上安装Linux1 下载CentOS操作系统六 远…

[附源码]计算机毕业设计springboot体育馆场地预约管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…