正则表达式

正则表达式分两种:

  1. 正则表达式字面量(不能放变量)
  2. 通过构造RegExp对象的实例(通过字符串拼接放变量,要注意如果用到“\”需要转义,因为“\”本身在字符串也表示转义)

正则是一接一个字符的 e.g/test/
^表示从字符串的开头进行匹配
类似$表示结尾
而同时出现表示必须包含整个字符串
e.g

/^test$/

字符类:要匹配一类字符要用[ ]
^在[]表示除了某些字符,在类中不需要对句号进行转义,因为它在这里没有元字符的含义

限定符:
当要匹配某个字符重复出现时,
?:0或1,最多一次,或指明一个非贪婪限定符,通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪心"表达式转换为"非贪心"表达式或者最小匹配。
+:出现一次或多次
*:零次或多次
{}:表示重复次数,最少次数必须,最多可不写

这些匹配重复出现的操作符默认是贪婪的,跟在这些操作符后的?可以让匹配变成非贪婪

预定义字符(以下是常用的)
. : 除了新行外的任意字符
\w:包括下划线的任意单词字符
\W:非单词字符
\s:任意空白字符
\s:非空白字符

分组()
-,+这类操作符只会影响前面术语,加上()就能用于一组
并能用于捕获在match里有比较大的作用

反向引用
在捕获中用于反向引用
\引用的捕获数量从1开始
\1(即前面分组的第一个,用于动态匹配,匹配一对未知标签很有用)

编译
写好的正则最好交给一个变量引用,以免二次编译,影响性能

下面是一个匹配标签:
e.g
<div class="a">123</div>

/<(\w+)[^>] ?>(.?)</\1>/

/<\s*(\w+)(\s[^>])?>([\s\S]*)?<\s*\/\1\s*>/

匹配<
第一个分组表示任意多个单词字符 div
第二个分组表示除>以外的字符 class=“a”
第三个分组表示除换行外的任意字符非贪婪匹配 123
匹配<\
匹配与第一个分组一样的 div
匹配>
为什么将*改成[\s\S]因为
*不能匹配换行\n
e.g
字符串去重
let str = '说话结结结结巴' str.replace(/(.)\1+/gi,'$1')

下面还有一个以图形方式展示正则表达式:
https://regexper.com/
能快速明白这个正则匹配什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值