JS 正则表达式

正则表达式

1.创建正则表达式
①使用对象字面量

let reg=/\bis\b/g;

②使用构造函数
使用构造函数形式需要插入转义字符

let reg2=new RegExp("\\bis\\b","g")

2.正则表达式的组成:
1.原义文本字符
2…原字符
3.一些特殊的符号

let reg=/\bis\b/g;
//is:原义文本字符
//\b g 元字符
// / / 特殊符号

3.正则表达式的三个修饰符:
g:全文搜索
i:忽略大小写
m:多行搜索 搜索的时候识别换行符
示例:let reg=/\bis\b/g;

3.正则表达式中的类:
字符类
当需要匹配一类字符的时候,用[]来构造一个简单的类
[]:匹配其中之一

//匹配abc中的一个
let reg=/[abc]/g;

字符取反类
^:不匹配属于该类的字符

//不匹配abc中的一个,即匹配除了a,b,c之外的字符
let reg=/[^abc]/g;

字符范围类
范围类表示匹配某个范围内的字符
[a-z]:匹配a到z中的字符,包括a,z的字母
[a-zA-Z0-9]:匹配a-z A-Z 0-9的字符
说明:
1.按照顺序写 不可以[a-z]
2. 符号‘-’只在两边都有数据的时候才表示范围,单独出现表示符号本身

let str="abc123-123aaaDDD"
str.replace(/[0-9-]/g,"*")
//abc*******aaaDDD"

预定义类
正则表达式提供了一些预定义类,用于快捷的表示一些特定的范围。
.:除了回车和换行符之外的所有字符
\d:[0-9] 数字字符
\D:[^0-9]非数字字符
\s: 空白符,\f 换页符,\r 回车符,\t 水平制表符,\n 换行符,\x0b 垂直制表符
\S:非空白符,\f 换页符,\r 回车符,\t 水平制表符,\n 换行符,\x0b 垂直制表符
\w:单词字符 (字母 数字 下划线)
\W:非单词字符
\b:单词边界
\B:非单词边界
^:以…开始
$:以…结束
使用示例:

let str2 = "This is a boy";
str2.replace(/\bis\b/g, "*");
//"This * a boy"
str2.replace(/\Bis\b/g, "*")
//"Th* is a boy"

3.正则表达式中的量词:
:出现0/1次
+: 至少出现一次
*:可有可无
{n}:出现n次
{n,m}:出现n-m次
{n,}:出现n次及以上
使用示例:

"12345678".replace(/\d{3,6}/g, "*");
//"*78"

说明:
默认情况下正则表达式采用贪婪模式–尽可能多的匹配,如上例中就匹配了6个数字字符
在量词后加上一个?来设置成为非贪婪模式–尽可能少的匹配

"12345678".replace(/\d{3,6}?/g, "*");
//"**78"

4.正则表达式中的分组:
使用()来进行分组
示例:

"a1b2c3d4".replace(/[a-z]\d{3}/g, "*")
//表示匹配连续3次数字出现字符
//"a1b2c3d4"
"a1b2c3d4".replace(/([a-z]\d){3}/g, "X");
表示匹配连续3次出现字母字符+数字字符
//"Xd4"

5.或:
使用|表示或:表示左右字符二选一

"ByronCasper".replace(/Byron|Casper/g, "X")
//"XX"
"ByrCasperByronsper".replace(/Byr(on|Ca)sper/g, "X");
//"XX"

6.反向引用:
使用$n(n为索引+1)引用模式中分组匹配到的文本需要结合分组使用

"2020-03-04" .replace(/(\d{4})-(\d{2})-(\d{2})/g, "$2/$3/$1");
//"03/04/2020"
"aabbcc".replace(/([a-z]{2})([a-z]{2})([a-z]{2})/g,"$3/$2/$1");
//"cc/bb/aa"

->反向引用说明

6.忽略分组:
当不想捕获分组的时候可以使用?:来忽略分组

"2020-03-04" .replace(/(\d{4})-(\d{2})-(?:\d{2})/g, "$2/$3/$1");
//"03/$3/2020"
"aabbcc".replace(/([a-z]{2})(?:[a-z]{2})([a-z]{2})/g,"$3/$2/$1");
//"$3/cc/aa"

7.前瞻:
正向前瞻:exp(?=assert)后面是assert才匹配
负向前瞻:exp(?!assert)后面不是assert才匹配

"aab1c2cc".replace(/\w(?=\d)/g,"*")
//仅当字符的后面是数字的时候才匹配
//"aa*1*2cc"
"aab1c2cc".replace(/\w(?!\d)/g,"*")
//仅当字符后面不是数字的时候才匹配
//"**b*c***"

8. RegExp对象:

  • RegExp对象的属性:
    global:是否全文搜索,默认为false,只读。
    ignoreCase:是否忽略大小写,默认为fasle,只读。
    multiline:是否多行搜索,默认为fasle,只读。
    lastIndex:当前表达式匹配内容的最后一个字符的下一个位置
    source:正则表达式的文本字符串

  • RegExp对象的方法:
    test(str):用于测试字符串参数中是否存在匹配正则表达式模式的字符串,返回true/false
    exec(str):使用正则表达式模式对字符串执行搜索,并将更新全部 RegExp 对象的属性以反映匹配结果,匹配失败返回null。

let reg1 = /\w{1,2}/g
reg1.test("aabb")
//true
reg1.exec("aabb");   
//["aa", index: 0, input: "aabb", groups: undefined]0: "aa"groups: undefinedindex: 0input: "aabb"length: 1__proto__: Array(0)
  • 正则表达式的相关方法
    search(reg),用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。返回第一个匹配结果的 index,没有匹配到返回-1。不执行全局匹配。
    match(reg),检索字符串以找到一个或多个与 regexp 匹配的文本,未找到返回 null,找到后返回一个数组。与 RegExp 的 exec()方法相同。
    split(reg),利用 regexp 匹配结果作为分隔符对字符串进行分割,返回一个数组。
    replace(reg, newStr),将 regexp 的匹配结果替换成 newStr,返回一个新字符串。
"aabb".search(/\w{1,2}/g)
//0
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值