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 |
\s | white 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 方法
分类 | 布尔 | 匹配 | 分组 |
---|---|---|---|
RegExp | test() | exec() | |
String | search() | 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免费指导。
快来与我一起学习吧~邀请链接 点击打开链接