1.转义符号
首先铺垫知识,转义符号是什么
比如你想在一个字符串里面整一个引号,你肯定不能写" asd"asd"(脑溢血写法)
这个时候你就得用到转义符号“\”了 ————> “asd"asd”
2.配合字母
简单举几个例子
- \n 换行
- \r 行结束
- \t tab健
- 一个回车代表的就是\r\n
3.正则表达式
RegExp();
1.首先基础格式是这样的
var reg = / /;
里面写的就是表达式
举个例子
var reg = /abc/;
var str = "abcd";
reg.test(str); //判断str里面是否有abc 有则true,否则false
基础格式后面可以添加i,g,m
作用分别是
var reg = / /i; 忽略大小写
var reg = / /g; 全局匹配
var reg = / /m; 多行匹配
其中i,g好理解,m的意思就是分行匹配,比如
var reg = /^a/m; //以a开头的行的那个a
var str = "abcd\na";
str.match(reg);
输出的就是["a","a"];
还有一种表达的方式,用的不多了解一下
var reg = new RegExp("","");
第一个参数就是abc啊之类的,第二个参数就是i,g,m
既然有对象那就要看一下指向问题
如
var reg1 = /abcd/;
var reg2 = new RegExp(reg1);
这时候reg1和reg2是一样的,但不是同一个
改变reg1中的属性reg2中的不会变
但是如果去掉 new 关键字,俩就是一样的,经典两把钥匙一扇门
4.表达式
var reg = / [ ] /g;
这里面[]代表的就是一位。
要求找三个连着的数字,那就是
var reg = /[1234567890][1234567890][1234567890]/g;
当然也可以写[0-9],写\d
注意一点就是 ^ 写在外面是以什么开头,而写在 [ ] 里面的意思是 “非”。
[^a]意思就是除了a以外的所有
5.元字符
\w === [0-9A-z_] 所有字母数字以及下划线(有些网站取名字好像就是这个标准呢)
\W === [^\w] 爹和儿子互补
\d ===[0-9]
\D === [^d]
\s === 空白字符(空格符、制表符、回车符、换行符、垂直换行符、换页符)
\S === 非空白字符
\b === 单词边界
var str = "i am handsome and smart";
这里面的单词边界就是(我用 . 代替).i..am..handsome..and..smart.
也比较好理解
\B === 非单词边界
6.量词
比如说你想匹配3位数的数字
就可以
var reg = /\d{3}/g;
var str = "123567908";
console.log(str.match(reg)); //["343", "465", "435"]
一些符号代表的含义
n+ ————>{1, } 1到正无穷
n* ————>{0, } 0到正无穷
注意下面这种情况
var reg = /\w*/g;
var str = "abc";
str...
输出的是["abc",""]
因为匹配到最后一位,到匹配完还有一位逻辑距离,此时*取0可以匹配出一个""。
var reg = /\d*/g;
var str = "abc";
str...
输出的是["","","",""]
注意正则表达式里面是贪婪匹配,能多不少
取下贪婪匹配的方法就是在量词后面加 ?
比如你是reg = /\d{3,5}/g;
能匹配5个绝对不匹配3个
实在没5个了才匹配三个
——————————————————————
/^ / 以什么开头
/ $/ 以什么结尾
/^abc$/ 就指定了必须是这个abc,定死了。
例题:检验一个字符串首尾是否含有数字
var reg = /^\d|\d$/g;
var str = "123abc123";
reg.test(str);
检验一个字符串首尾是否都含有数字
var reg = /^\d[\s\S]*\d$/g;
var str = "123abc123";
reg.test(str);
7.反向引用
比如要你选出aabb这种形式的字符串咋办
这个时候就可以用反向引用的知识
var reg = /(\w)\1(\w)\2/g;
a a b b
这里面的\1意思是反向引用这里面的第一个子表达式,\2就是反向引用第二个
这里就又可以穿插一下exec这个东西了
还是这个题
var str = "aabb";
var reg = /(\w)\1(\w)\2/g;
console.log(reg.exec(str));
输出结果会是:
很明显\1就是这里面的"a",\2就是"b"
其实exec有蛮大的学问
里面有个lastIndex参数,是exec匹配的游标,而且我们可以手动修改
var reg = /ab/g;
var str = "abababab";
reg.exec(str);
输出只输出一个["ab"]
继续执行他会输出4次ab,到第5次会输出null
然后开始循环
所以他其实每次执行的匹配游标不一样,上面是lastIndex数值
8.replace
一个很实用的方法,看名字就知道是什么作用
直接上题:将aabb替换为bbaa
var reg = /(\w)\1(\w)\2/g;
var str = "aabb";
str.replace(reg,"$2$2$1$1");
这里的$1就相当于reg里的\1
注意replace没有访问全局的能力,如果reg里面没有g,就只替换一个。
9.正向断言
var reg = /a(?=b)/g;
题目
正则表达式的题目很多,我也就不做总结了,选一个自己觉得很搞的
给一个数100000000000,你要把它写成10,000,000,000这种形式
开始不做人,一行搞定