1.正则的匹配模式(修饰符)
g:全局模式;
i:不区分大小写模式;
m:多行模式;
2.需要转义的元字符
( ) [ ] { } \ | ^ $ ? * . +
3.正则中各个符号的表示含义及量词:
方括号:
[abc] | 查找方括号之间的任何字符。 |
[^abc] | 查找任何不在方括号之间的字符。 |
[0-9] | 查找任何从 0 至 9 的数字。 |
[a-z] | 查找任何从小写 a 到小写 z 的字符。 |
[A-Z] | 查找任何从大写 A 到大写 Z 的字符。 |
[A-z] | 查找任何从大写 A 到小写 z 的字符。 |
[adgk] | 查找给定集合内的任何字符。 |
[^adgk] | 查找给定集合外的任何字符。 |
(red|blue|green) | 查找任何指定的选项。 |
元字符:(简化表达式,若不加入量词,表示单个字符)
. | 查找单个字符,除了换行和行结束符。 |
\w | 查找单词字符。 word 由字母、数字、_组成 ,等价于 [a-zA-Z0-9_] |
\W | 查找非单词字符。 |
\d | 查找数字。 digit 等价于 [0-9] |
\D | 查找非数字字符。 等价于 [^0-9] |
\s | 查找空白字符。 space |
\S | 查找非空白字符。 |
\b | 匹配单词边界。 |
\B | 匹配非单词边界。 |
\0 | 查找 NUL 字符。 |
\n | 查找换行符。 |
\f | 查找换页符。 |
\r | 查找回车符。 |
\t | 查找制表符。 |
\v | 查找垂直制表符。 |
\xxx | 查找以八进制数 xxx 规定的字符。 |
\xdd | 查找以十六进制数 dd 规定的字符。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 中文字符 |
量词:
n+ | 匹配任何包含至少一个 n 的字符串。 >=1 |
n* | 匹配任何包含零个或多个 n 的字符串。 >=0 |
n? | 匹配任何包含零个或一个 n 的字符串。 0|1 |
n{X} | 匹配包含 X 个 n 的序列的字符串。 x |
n{X,Y} | 匹配包含 X 到Y 个 n 的序列的字符串。 x<= <=y |
n{X,} | 匹配包含至少 X 个 n 的序列的字符串。 >=x |
n$ | 匹配任何结尾为 n 的字符串。 |
^n | 匹配任何开头为 n 的字符串。 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
逻辑运算
X正则Y正则 | 表示X正则之后紧跟着验证Y正则 |
X正则|Y正则 | 表示两个正则选一个 |
() | 表示一组正则 |
4.正则编写
如:
/** * 匹配所有以at结尾的3个字符的组合 的正则实例方式 * @type {RegExp} */ var reg_1 = /.at/g; var reg_2 = new RegExp('.at','g');
/** * 匹配协议的正则 * @type {RegExp} */ var tcp = /^((http|https):\/\/(\w+:{0,1}\w*@)?(\S+)|)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;
5.正则的常用方法-----exec()和test()
exec() :
接受一个字符串参数,返回包含第一个匹配项信息的数组,或者在没有匹配项的情况下放回null;
如:
var reg = /.at/g; var reg_1 = /.klkl/g; var str = ',cat,fjl,hat,dfdf,djkf'; var a = reg.exec(str); console.log(a); //["cat", index: 1, input: ",cat,fjl,hat,dfdf,djkf"] console.log(a.index); //1 console.log(a[0]); //cat console.log(a.input); //,cat,fjl,hat,dfdf,djkf console.log(reg_1.exec(str)); //null
test() :
接受一个字符串参数,在模式与该参数匹配的情况下返回true,否则返回false;
var reg = /.at/g; var reg_1 = /.klkl/g; var str = ',cat,fjl,hat,dfdf,djkf'; console.log(reg.test(str)); //true console.log(reg_1.test(str)); //false
6.字符串中使用正则的方法----match(),search(),replace(),
match()和正则的exec()相同
search():
传入一个正则为参数,从字符串的开头去匹配,匹配到返回1,否则返回-1;
如:
var reg = /.at/g; var reg_1 = /.klkl/g; var str = ',cat,fjl,hat,dfdf,djkf'; console.log(str.search(reg)); // 1 console.log(str.search(reg_1)); // -1
replace() :
传两个参数,第一个参数为正则或字符串,第二个参数为要替换成的字符串或者是一个函数;
(1)第一个参数为字符串时,只替换第一次匹配到的:
如:
var str = ',cat,fjl,hat,dfdf,djkf'; console.log(str.replace('at','我是替换后的')); //,c我是替换后的,fjl,hat,dfdf,djkf
(2) 第一个参数为正则,若是全局的就将所有匹配到的都替换了,否则也只是替换第一个:
如:
var reg = /.at/g; var reg_1 = /.at/; var str = ',cat,fjl,hat,dfdf,djkf'; console.log(str.replace(reg,'我是替换后的')); //,我是替换后的,fjl,我是替换后的,dfdf,djkf console.log(str.replace(reg_1,'我是替换后的')); //,我是替换后的,fjl,hat,dfdf,djkf
(3)第二个参数是一个函数,在匹配时会向该函数传递三个参数:模式的匹配项、模式匹配项在字符串中的位置和原始字符串;
如:
var reg = /.at/g; var reg_1 = /.at/; var str = ',cat,fjl,hat,dfdf,djkf'; var s = str.replace(reg_1,function (match,pos,originalText) { console.log(match); //cat console.log(pos); //1 console.log(originalText); //,cat,fjl,hat,dfdf,djkf console.log('--------'); return '我是替换后的' }); console.log(s); //,我是替换后的,fjl,hat,dfdf,djkf
一道面试题:将 '这是一个[笑脸],这是一个[哭脸]'变成 '这是一个:),这是一个:('。
var obj = { '[笑脸]' : ':)', '[哭脸]' : ':(' }; var str = '这是一个[笑脸],这是一个[哭脸]'; var reg = /\[[\u4e00-\u9fa5]+\]/g; //匹配中文字符 function replaceString(reg,str,obj) { return str.replace(reg,function (match,pos,originalText) { return obj[match]; }); } console.log(replaceString(reg,str,obj)); //这是一个:),这是一个:(