如何使用正则表达式?

1.背景介绍

编程中经常用到字符串的操作,对于字符串的匹配、查找符合某些规则的字符串。示例如下:

1 快速分析大量文本,以找到特定的字符模式

2 验证文本以确保它匹配预定义模式

3 提取、编辑、替换或删除文本子字符串。

正则表达式-regular expression并不是一种编程语言,而是一种规则-查找符合某些复杂规则的字符串,即正则表达式是记录文本规则的字符串。

2.知识剖析

正则表达式规则

1 简单模式/特定模式

正则表达式支持的字符编码范围非常大,也支持中文查找。

简单模式直接使用字符编码中特定的编码或者特定的多个编码。

单个字符:数字、字母大小写、符号

字符特定元字符
数字0-9\d
字母a-zA-Z\w
符号. *\s

符号在正则表达式中含有特殊含义,匹配符号本身需要转义\

2 通用模式

我所说的通用模式指符合一定规则,适用范围更广的正则表达式。

主要有3个细分规则: 
1 字符single char 
2 数量quantifier 
3 位置position

1 字符

字符范围[]

元字符范围取反
\d[0-9]\D[^0-9]
\w(word)[A-Za-z_0-9]\W
\swhite space (空格、制表符、换行)\S
.除换行符以外的任意字符 

2 数量

数量用{}表示

数量等效符号
{n}n次
{m,n}m-n之间
{0,1}?
{0,}*
{1,}+

3 位置

起始和边界

^开头
$结尾
\b单词边界
|

4 分组

正则表达式还有提取子串的强大功能,用()表示的就是要提取的分组(Group)

如何选择已经匹配的分组?

两种方法,第一种使用$符号,比如$1 代表555,$2代表1234;第二种,使用\,比如\1代表555。

5 flag

g:全部;i:忽略大小写;m:多行匹配

正则表达式方法

RegExp 的 exec 和 test 方法

String 的 match、replace、search 和 split 方法

分类布尔匹配分组
RegExptest()exec() 
Stringsearch()match()replace() split()

3.常见问题

什么情况下使用正则表达式

4.解决方案

查找、验证、转义

5.编码实战

// reg.test()
var r = /\d{3}/;
var a = '123';
var b = '123ABC';
var c = 'abc';

r.test(a) //true
r.test(b) //true
r.test(c) //false

// reg.exec()
var str = "Here is a Phone Number 111-2313 and 133-2311";
var srg = /(\d{3})[-.]\d{4}/g; //3位数字-. 4为数字
var result = srg.exec(str);
while (result !== null) {
  console.log(result);
}

// str.match()
var r = /compus/
var reg = /w+/
var s = "compus, I know something about you"
r.test(s)  //true
s.match(r)  //["compus"]
s.match(reg) //["compus"]

// str.split
var s = "unicorns and rainbows And, Cupcakes"
var result = s.split(' ');
var result1 = s.split(/\s/);
//完全一样的效果
//["unicorns", "and", "rainbows", "And,", "Cupcakes"]

// str.search
var str = "hey JudE";
var re = /[A-Z]/g;
var re2 = /[.]/g;
console.log(str.search(re)); // returns 4, which is the index of the first capital letter "J"
console.log(str.search(re2)); // returns -1 cannot find '.' dot punctuation

// str.replace(reg,replace|function)
var s = "Hello,My name is Vincent. What is your name?"
var newStr = s.replace(/\b\w{4}\b/g,replacer)
console.log(newStr)
function replacer(match) {
    console.log(match);
    return match.toUpperCase();
}

6.扩展思考

7.参考文献

参考一  MDN正则表达式

参考二  廖雪峰正则表达式

参考三  掘金文章

8.更多讨论

问:什么情况下使用正则表达式

答:查找、验证、转义

从互联网上按照某种规则搜索想要的数据,对于分析复杂的HTML标签,正则表达式是一件利器。

无论对于软件还是网站,用户输入的数据都需要验证后再提交,以得到安全和想要的数据。

尤其对于网站,安全是至关重要的,写好正则表达式,能够验证输入信息,保证输入数据的合法性,不至于不法人士侵入数据库破坏网站。

问:正则表达式包含哪些元字符

答:数字\d 单词\w 符号\s 字符.

问:正则表达式怎么确定字符数量?

答:{}确定,{m,n}mn 决定最小数和最大数。

 

 

技能树.IT修真院   

 “我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

 

快来与我一起学习吧~邀请链接 点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值