js正则表达式(二)

quartusII简易CPU设计 优点可以实现八种运算,数据的存取及运算都能很好的实现,上板也很成功。缺点首先由于自己知识储备的缺乏,只能实现较为简单的8种运算,也是最简单的直接寻址。其次为了方便操作,没有从外部输入数据,都是直接使用存储在存储器中的数据。后续发展后续会在此简易CPU的基础上增加一些功能对CPU进行完善,如算术运算可以考虑是补码运算,输入、输出采用存储缓冲等等,直至完整的全功能的处理器。收获通过这次实践,更熟悉Quartus软件的操作。能过更加清楚每个器件的操作,比如计数器,运算器,译码器等的实现功能。 阅读详情

js正则表达式(二)

原子表[]

原子表只代表一个字符

let hd='houdunren';
console.log(hd.match(/ue/)); // 这个表示整个ue,连在一起的ue
console.log(hd.match(/[ue]/g)); // 这个表示u或e,是[xxx]中的单个字符,按单一匹配

// 这里有一个日期的例子
let str='2021-11-29'
let reg=/^\d{4}([-\/])\d{2}\1\d{2}$/
console.log(reg.test(str)); // true
str='2021/11/29';
console.log(reg.test(str)); // true
str='2021/11-29';
console.log(reg.test(str)); // false

区间匹配 -

-:子区间的意思

let hd='houdunren'
// 匹配过程:h满足,放起来;o满足,放起来……
console.log(hd.match(/[a-z]/g)); // ['h','o',...]
// 加上+就贪婪了:满足满足满足会将最后变成一个整体
console.log(hd.match(/[a-z]+/g)); // ['houdunren']

排除匹配 ^

let hd='张三:010-88888888,李四:021-77777777'
console.log(hd.match(/[^:\d\-,]+/g))
console.log(hd.match(/\p{sc=Han}+/gu))

特殊字符不解析

在原子表中,字符只是保留字符本意。

let hd='(houdunren).+'
console.log(hd.match(/[().+]+/g)) // 只是保留字符本意

小技巧:如何匹配所有字符

let hd=`
    houdunren
    angela
`
console.log([...hd]);
// 1.使用.*结合s模式
console.log(hd.match(/.*/s));
// 2.[\s\S] x和非x结合起来
console.log(hd.match(/[\s\S]+/));

正则操作dom~这个例子很有意思

题意:去掉html中的h标签,即h1-h6

这里有3个点很重要:

  1. 首先是匹配标签中的所有内容。上一个小技巧讲过

  2. 使用分组。因为前后标签一定要是匹配的,所以后面一定要使用分组。<h[1-6]>...<\/\1>

  3. 要使用.*?这种懒惰模式。匹配到最近的闭合标签。

let htmlStr=document.body.innerHTML;
console.log('---')
// 去掉script标签
console.log(htmlStr.match(/<script (.*?)<\/script>/sg))
htmlStr=htmlStr.replace(/<script (.*?)<\/script>/gsi,'')
console.log('开始---')
console.log(htmlStr)
// 关键的一句正则在这里
htmlStr=htmlStr.replace(/<(h[1-6])>.*?<\/\1>/gsi,'')
console.log(htmlStr)
document.body.innerHTML=htmlStr;

这里有一个扩展:懒惰模式

在 .* 或者 .+ 后面,加上一个?,就表示懒惰模式。我匹配到第一个就不再往后匹配了,即最小匹配。

等于:后面跟一个?表示懒惰模式。它是必须跟在 * 或者 + 后面用

正则表达式-- (.*?) 或 (.*+)_Scarlett-CSDN博客

https://www.jb51.net/article/187050.htm

原子组()

用括号包裹的就是原子组,自动为每个组进行编号,引用分组 \1 \2 ......

let str=`
     <h1>regexp</h1>
     <h2>js</h2>
`
let reg=/<(h[1-6])>([\s\S]*)<\/\1>/i;
console.log(str.match(reg))

邮箱中的简单匹配

正则语法不难,考虑细一点,方方面面都要想到

let str=`adjejing@qq.com`
let reg=/^[\w-]+@([\w-]+\.)+\.(com|cn|cc|net|org)$/;
console.log(str.match(reg))

使用原子组完成替换

如果你想把某个内容拿出来你就把它变成一个组,用$1 $2去拿到它

str.replace(reg,(match,$1,$2,$3,index,input)=>{ ... }

这里补充一下replace function的参数:

  1. 第一个是匹配到的字符串

后面就是各个分组,无分组则没有

  1. $1

  2. $2

  3. $3

......

  1. index,匹配到字符串在整个字符串中的位置

  2. input,整个字符串

我们惊奇地发现,同str.match(非/g模式)方法返回的数组的元素是一样的

额外:括号套括号的情况,数的话从边上开始数, 从左括号边开始数

let str=`
     <h1>hello angela</h1>
     <h1>连续的h1</h1>
     <h2>hello regexp</h2>
     <p>regexp</p>
`
let reg=/<(h[1-6])>([\s\S]*?)<\/\1>/gi;
str=str.replace(reg,(match,$1,$2,$3)=>{
    console.log('---')
    console.log(match)
    console.log($1)
    console.log($2)
    console.log($3)
    return `<p>${$2}</p>`
})
console.log(str);

获取url:非捕获分组和嵌套分组

?: 非捕获分组。无法使用$1 \1 以及match、exec中都不会有相关输出

嵌套分组:括号套括号的情况,数的话从边上开始数, 从左括号边开始数

let str=`
     https://www.baidu.com
     http://houdunren.com
     https://jsrun.org
`
let reg=/https?:\/\/((?:\w.)+(?:com|cn|org))/g;
console.log(str.match(reg))
let urls=[]
let res;
while(res=reg.exec(str)){
    urls.push(res[1])
}
console.log(urls);

重复匹配(结合分组)

符号* + { , }:这个再熟悉不过了,即贪婪模式。它们都是贪婪的,尽可能多,越多越好

(abc)+:如果说前面有分组,那么贪婪是针对于整个分组的

电话号码例子

let str=`010-88888888`
// 以0开头,前面304位,-后面7-8位
let reg=/^0\d{2,3}-\d{7,8}$/
console.log(str.match(reg))

用户名例子

let str=`angela95`
// 以0开头,前面304位,-后面7-8位
let reg=/^[a-z][\w-]{2,7}$/i
console.log(str.match(reg))

密码的例子

有时候一个数据会需要多个正则进行校验,我们可以把正则做到数组里面,然后使用regs.every

let password=`angelA95`
let iscorrect='错误'
// 由字母和数字组成,必须包含一个大写字母
if(/^[a-z0-9]{5,10}$/i.test(password) && /[A-Z]/.test(password) && /[0-9]/.test(password)){
    iscorrect='正确'
}
console.log(iscorrect)
// 下面的做法语法更漂亮
const regs=[/^[a-z0-9]{5,10}$/i,/[A-Z]/,/[0-9]/]
// every:全都为真的时候,整个表达式为真
console.log(regs.every(reg=>reg.test(password)))

懒惰模式,即禁止贪婪

在限定词后面加上问号?,就表示禁止贪婪,即懒惰模式。

我匹配到最近的一个就不往后匹配了,立即停止。

这里有一个典型的懒惰模式的例子~~~

let str=`
     <span>houdunren</span>
     <span>houdun.com</span>
     <span>hdrjy</span>
`
let reg=/<span>([\s\S]*?)<\/span>/g
str=str.replace(reg,`<h4 style="color:red">后盾人-$1</h4>`)
console.log(str)
document.body.innerHTML=str;

如果 reg=/<span>([\s\S]*)<\/span>/g

那么它会匹配到最后一个</span>闭合标签,因为其实中间所有的内容都满足[\s\S],*是贪婪的,所以并不是我们想要的;

所以要加上? reg=/<span>([\s\S]*?)<\/span>/g

禁止贪婪使其匹配到最近的一个闭合标签</span>

 

微信DAT图片恢复全攻略:从文件路径到批量解密(附最新工具下载) 本文详细介绍了微信DAT图片恢复的全过程,从文件路径定位到批量解密操作,帮助用户高效恢复加密存储的图片。文章涵盖新旧版本微信的存储结构差异,推荐使用专业解密工具进行批量转换,并提供了提升恢复成功率的实用技巧和常见问题解决方案。 阅读详情

相关推荐

ads传统功放设计笔记(3)

传统功放设计的流程一般包括以下这些步骤: 1、明确设计目标 2、选择功放管子 3、确定静态工作点 4、设计偏置电路 5、判断稳定性 6、负载与源牵引 7、输入输出阻抗匹配 8、原理图优化 9、大信号仿真 10、版图设计 11、版图联合仿真 12、pcb设计 第节我们设计仿真了功放的原理图。之后我们需要对版图进行设计和仿真。 10、版图设计 首先将S参数控件都打叉,还要去电源、源负载阻抗、地、芯片、电容。在原先电容和芯片的位置加上gap,设置好长度和间隔。之后在电源引脚、输入输出引脚和隔离的两端加上端口。

qq_40995480的博客 5981

python(4)正则表达式

1.基础 {m} 匹配前一个字符m次 [abc] a或b或c * 匹配前一个字符0到无限次 + 匹配前一个字符1到无限次 ? 匹配前一个字符0到1次 {a,b}匹配前一个字符或子表达式至少m次至多n次 {n,} 匹配前一个字符或者子表达式至少n次 . 代表任意一个字符,包括它本身 ^ 表示取反 多加个?号,会把模式为惰性匹配 简单来说,就是你要匹配的字符是XX,但必须满足形式是AXXB这样的字符串,那么你就可以这样写正则表达式 p = r"(?<=A)XX(?=B)

qq_31759493的博客 411

基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能

基于uniapp的PDA扫码枪APP开发实战,实现高效RFID读取功能,uniapp整合PDA硬件的实践分享,基于uniapp的PDA端RFID批量扫描方案开发

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

PHP 获取一段HTML标签,php截取html字符串及自动补全html标签的方法

本文实例讲述了php截取html字符串及自动补全html标签的方法。分享给大家供大家参考。具体分析如下:这里总结一下关于利用php截取html字符串自动补全html标签,实际开发中会经常碰到,很多人直接先strip_tags过滤html标签,但是就只剩下纯文本了,可读性非常差,下面是一个函数,代码如下:/*** 截取HTML,并自动补全闭合* @param $html* @param $leng...

weixin_42116794的博客 1079

正则表达式修改替换标签的办法和代码

正则表达式修改替换标签的办法和代码

爱意迷了眼丶的博客 2132

JavaScript——正则 原子表和原子组

【代码】JavaScript——正则 原子表和原子组。

qq_40269801的博客 258

正则表达式

一、概述 正则表达式用于文本内容的查找和替换。 正则表达式内置于其它语言或者软件产品中,它本身不是一种语言或者软件。 、匹配单个字符 . 可以用来匹配任何的单个字符,但是在绝大多数实现里面,不能匹配换行符; . 是元字符,表示它有特殊的含义,而不是字符本身的含义。如果需要匹配 . ,那么要用 \ 进行转义,即在 . 前面加上 \ 。 正则表达式一般是区分大小写的,但是也有些实现是不区...

wu_amber的博客 1039

【JavaScript】-- 正则表达式

查找字符串中是否有匹配正则表达式字符串,有则返回字符串第一次出现时的位置,没有就返回null(无论是否在全局模式下都不影响返回结果)在此案例中匹配到 H 字符后不为 i 的 H 并将其通过replace替换成了T,而 H 侯紧跟 i 的则不受任何影响。取能够匹配到的数量尽可能多的为一组进行匹配,匹配剩余字符串时还会尝试新的匹配,直到匹配不到为止。查找字符串中是否有匹配正则表达式字符串,有则返回一个数组,包括字符串内容、位置,\1引用了第一个被分组所捕获的串,换言之,表达式是动态决定的。...

qq_48802092的博客 350

、Javascript 与正则表达式

Javascript 与正则表达式一、正则表达式(regular expression简称res)1、定义:2、作用:3、主要用途:4、如何来构造正则表达式、下表是元字符及其在正则表达式上下文中的行为的一个完整列表:三、正则表达式的常用方法:四、与正则表达式有关的字符串对象的方法:五、常用的正则表达式的操作符六、一些常用的正则表达式示例: 一、正则表达式(regular expression简...

qq_40472328的博客 205

学会JavaScript正则表达式

概念描述示例分组与捕获使用()创建分组,可以捕获匹配的子字符串匹配日期格式边界匹配使用和匹配字符串的开始和结束^Hello匹配以 “Hello” 开头的字符串回溯引用使用\n引用之前捕获的分组匹配重复的单词预查断言使用=...)和!...)进行正向肯定或否定预查\b\w+(?=\d)匹配后面紧跟数字的单词这个图表总结了进阶概念的关键点,并提供了简短的示例来帮助理解每个概念的应用。在实际应用中,这些概念可以组合使用,以创建更复杂和强大的正则表达式

球球不吃虾WHR2349博客 1049

牛腩javascript()之正则表达式

JS正则表达式的应用。

Just Do It 1545

JS正则表达式

一.位置匹配 ^和$ ^(脱字符)匹配开头,在多行匹配中匹配行开头。 $(美元符号)匹配结尾,在多行匹配中匹配行结尾。 比如我们把字符串的开头和结尾用 “#” 替换 var result = "hello".replace(/^|$/g, '#'); console.log(result); // => "#hello#" 多行匹配模式(即有修饰符 m)时,者是行的概念,这一点需要我们注意: var result = "I\nlove\njavascript".replace(/^|$/gm,

weixin_45569004的博客 277

javascript之正则表达式()

      js正则贪婪模式与非贪婪模式              类似于贪吃蛇游戏,越吃越长。而贪婪模式就是尽可能多的匹配。       默认是贪婪模式 (尽可能多的匹配)            例子: var str='12345678 ';                           var ...

111

javascript正则表达式<>

var re = /[a-z]$/; var str = "ab\ncdef"; alert(str.replace(re,"#"));//ab\ncde# re =/[a-z]$/m; alert(str.replace(re,"#"));//a#\ncde#   使用元字符注意事项:元字符是正则表达式的一部分,当我们要匹配正则表达式本身时,必须对这些元

无名指的约定 1960

javascript 正则表达式

在Javascript里,有两种使用正则的方法,一是创建一个正则表达式的实例,而是使用String对象里的正则表达相关的方法. 首先是正则表达式的创建,有2种办法: var my_regex=/[a-z]+/g; var my_regex=new ("[a-z]+","g"); 方法exec(string),对string进行正则处理,并返回匹配结果. test(string),测试strin...

hojor的专栏 128

正则表达式html标签的属性

现在,我们有如下的一个字符串: var str = "<td style=\"width: 23px; height: 26px;\" align=\"left\">***</td>"; 首先,使用正则表达式匹配标签中的 ”属性名 = 属性值(包括了有引号的、没引号的)” var reg = /\s*[^=\s+]+\s*=\s*([^=>]+)...

Ivanzn的博客 1819

正则表达式 提取 html 标签的内容

例如: 内容

踩姑凉的小蘑菇 3466

js正则匹配替换,一对闭合html标签

let str = `<div> <h1>正则测试</h1> <p class=""> <style>.icon{width:100%;}</style> 测试正则匹配替换 </p> <br/> <p class=""> <style>.icon{width:100%;}</style> 测试正则匹配替换 </p> </d.

xiaoxiazi_32的博客 1654

正则表达式使用说明(基础知识,原子字符,模式修饰,原子表,原子组,重复匹配)

正则表达式使用说明(基础知识,原子字符,模式修饰,原子表,原子组,重复匹配)

GMLGDJ的博客 2143

正则删除HTML标签

正则表达式删除HTML标签

aquial的博客 2433

免费开源进销存 FOXTABLE开发

免费开源进销存 FOXTABLE开发

LSPIA.rar_B spline surface_surface fitting_trainc6w_曲线曲面拟合_渐进迭代逼

代码实现2014 CAD 文章 Progressive and iterative approximation for least squares B-spline curve and surface fitting

上一篇: js正则表达式
下一篇: js正则表达式(三):API篇
betterangela
博客等级 码龄12年 129粉丝 103原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值