正则表达式入门教程第一篇

正则表达式是用来匹配和处理文本的字符串


第一节 匹配单个字符

1.1 匹配纯文本

例:替换字符串中的名称

var r = "my name is chijiandelongtao";
r = r.replace(/chijiandelongtao/,"LI"); 
console.log(r);

当要替换的字符串有多个时:

var r = "my name is chijiandelongtaochijiandelongtao";
//g代表 global (全局) 若想不区分大小写 可写成/gi
r = r.replace(/chijiandelongtao/g,"LI"); 
console.log(r);
1.2匹配任意字符

. 号可以匹配任意单个字符:

var r = "my name is chijiandelongtao";
r = r.replace(/.hijiandel.ngta./g,"LI"); 
console.log(r);
1.2匹配特殊字符

.号在正则里有特殊含义(还有别的 如 + ,?,^ 等),如果想在字符串里找到 . ,需要加上转义字符\

var r = "my name is chijiandelongtao.";
r = r.replace(/\./g,"hehe"); 
console.log(r);
//如果不加则会把所有字符都替换成hehe
var r = "my name is chijiandelongtao.";
r = r.replace(/./g,"hehe"); 
console.log(r);

第二节 匹配一组字符

2.1 匹配多个字符中的某一个

[ ]用于定义一个字符集,表示以该字符集内字符开头的字符串。注意集合内是或的关系。[cs] 表示必须以c开头或者以s开头。[.]就表示匹配. 无需转义因为[.]=[\.]。字符集内的字符将被解释成普通字符:

var r = "my name is chijiandelongtao shijiandelongtao";
r = r.replace(/[cs]hijiandelongtao/g,"LI"); 
console.log(r);
2.2 取非匹配

[ ]用于定义一个字符集,^ 表示你想对一个字符集和进行取非匹配:

var r = "my name is chijiandelongtao shijiandelongtao zhijiandelongtao";
r = r.replace(/[^cs]hijiandelongtao/g,"LI"); 
console.log(r);

第三节 使用元字符 (正则里具有特殊含义的符号)

3.1 特殊符号转义

具有特殊含义的字符需要加上转义字符 \

var r = "my name is chijiandelongtao shijiandelongtao[1] zhijiandelongtao[0]";
r = r.replace(/[zs]hijiandelongtao[0-9]/g,"LI"); 
console.log(r);
//这样是匹配不到的,因为[] 是特殊字符,需要加上转义字符 \
var r = "my name is chijiandelongtao shijiandelongtao[1] zhijiandelongtao[0]";
r = r.replace(/[zs]hijiandelongtao\[[0-9]\]/g,"LI"); 
console.log(r);
3.2 匹配空白字符
元字符说明
\n换行
\f换页
\r回车
\t制表符 (Tab按键)
\v垂直制表符
\s任意空白字符
\S任意非空白字符
var r = "my name is chijiandelongtao shijiandelongtao[1] ";
r = r.replace(/\s/g,"LI"); 
console.log(r);
//非空白是大 S  空白是小 s
var r = "my name is chijiandelongtao shijiandelongtao[1] ";
r = r.replace(/\S/g,"LI"); 
console.log(r);
3.3 匹配数字
元字符说明
\d任意一个数字字符
\D任意一个非数字字符
var r = "my name is chijiandelongtao shijiandelongtao[1] ";
r = r.replace(/\d/g,"LI"); 
console.log(r);
3.4 匹配字母和数字
元字符说明
\w任意一个字母数字字符 (等价于 [a-zA-Z0-9_])
\W任意一个非字母数字字符
var r = "[m]y_name_is_chijiandelongtao_shijiandelongtao[1] ";
r = r.replace(/\w/g,"LI"); 
console.log(r);

第四节 重复匹配

4.1 匹配一个或多个字符

匹配一个或多个字符使用 + 号,不匹配零个字符的情况。如a+ 匹配连续出现的a

var r = "153708@qq.com";
//w+匹配连续出现的字母数字或者下划线(_)
r = r.replace(/\w+@\w+\.\w+/,"我擦泪"); 
console.log(r);
4.2 匹配零个或多个字符

*表示任意数量,集合表示是[0, +00);
+表示至少1次,集合表示是[1, +00);

var r = "@qq.com";
r = r.replace(/\w*@/,"我擦泪"); 
console.log(r);
4.3 匹配零个或一个字符

匹配零个或者一个字符使用 ?

var r = "http: https: httppp:";
//? 前面的s要么出现要么不出现
r = r.match(/https?:/g); 
console.log(r);
4.5 为重复匹配次数设置精确值

重复次数使用 {number}

var r = "http: https: httppp:";
//匹配h至少重复一次或者更多次,t重复两次,p重复1-2次的字符
r = r.match(/h{1,}t{2}p{1,2}/g); 
console.log(r);
4.6 防止过度匹配

涉及到贪婪型匹配和懒惰型匹配的问题

var A= "<B>kkkk</B>-------------<B>llllHi</B>"
A = A.match(/<[Bb]>.*</g)
console.log(A);
//结果是 <B>kkkk</B>-------------<B>llllHi< 。但是正确的结果应该是 <B>kkkk<
//因为*和+都是贪婪型元字符,他们进行匹配时会从文本开头尽可能的匹配到文本末尾。针对这种情况应该使用懒惰型元字符
贪婪型懒惰型
**?
++?
var A= "<B>kkkk</B>-------------<B>llllHi</B>"
A = A.match(/<[Bb]>.*?</g)
console.log(A);

参考手册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值