正则表达式
regExp(regular expression),即规则表达式的英文缩写其一般的用法是:
- 验证字符串是否符合正则所制定的规则,比如注册表单中各项填写规则的验证;
- 把符合规则的字符串部分从字符串捕获;
由于正则为引用数据类型,所以声明方式可以是字面量也可以是实例声明:123var reg = /\d/;var reg = new RegExp('\d');//es5中参数必须是字符串,var reg = new RegExp(/\d/);/// Es6中可以直接放正则了
正则的常用方法
基本有两个:test()/exec()
- test()表示匹配
- exec()表示捕获
- 属性:flags 正则的修饰符(ES6);source 返回正则的正文;lastIndex 下一次匹配正则时的位置,exec用;$n:再RegExp上可以使用的属性,n为第几个小正则最后被使用(包括匹配和捕获)的分组的内容,再replace等方法中,直接用$n简写;
|
|
String 方法与正则一起使用
- match:返回一个数组,一次性捕获所有符合规则的,配合小正则;
分组引用,小正则后面跟\n\n\n\n,表示对第n个小正则的再次引用,但以括号左半边为准;
|
|
- split:返回一个数组,按照一个正则来拆分字符串,忽略g和lastindex属性
- replace:参数1 正则表达式,参数2 要替换的项目,如果是函数,则替换为函数返回值123456var str = "firefox chrome msie";str = str.replace('/^msie$/',function(a,b,c,d) {return 'ie';console.log(arguments);//参数2中的arguments:[大正则匹配返回,小正则返回,index,input]console.log(arguments[n]);//可用于遍历})
正则表达式特殊字符
正则需要使用特殊字符,来控制(为啥不支持mk表格语法呢?):
|字符|描述|
|-|-|
|\d|0~9之间的任意一个数字|
|\D|非0~9之间的任意一个数字|
|\w|任何非单词字符(a-zA-Z0-9)|
|\W|非任何非单词字符(a-zA-Z0-9)|
|\s|空格或者空白|
|\S|非空格或者空白|
|\b|边界,包括双引号和空格和‘—’‘%’等等特殊字符也会视为边界(数字结尾/\d\b/)|
|\B|非边界,包括双引号和空格和‘—’‘%’等等特殊字符也会视为边界|
|\n|换行付|
|\r|匹配回车|
|\R|陪陪非回车|
|.|匹配除换行以外的任意字符|
|^|范围限制起始|
|$|范围限制结尾|
|.|转义.|
|||转义|
|{n}|出现n个|
|{n,}|至少出现n个|
|{n,m}|出现n-m个|
|*|0到多个|
|+|1到多个|
|?|0或者1个|
|x|y|x或者y中的一个|
|()|包含的小正则表达式,提升优先级|
|[xyz]|x或者y或者z中的一个|
|[^xyz]|只要有一个非x/y/z就行|
|[0-9a-zA-Z]|0-9中的一个,或者a-z及A-Z中的一个|
|[.]|代表’.’本身|
|g|全局|
|i|忽略大小写|
|m|多行匹配|
点击查看常用正则表达式
ES6正则补充
‘u’修饰符
Es6中增加‘u’修饰符,主要为了补充ES5中大于‘\uFFFF’的Unicode字符,‘u’的出现使得中文的匹配中更加合理
包括‘.’、量词、预定义,使用修饰符‘u’之后可以较好的匹配大unicode。
‘y’修饰符
‘y’修饰符不好理解,其作用与‘g’相似,表示全局匹配,不同在于‘y’修饰符有粘连的意思,‘g’只要剩余位置中存在匹配就行
上述中,使用g修饰的reg1,第二次执行exec时,因为后续有a可以输出,但加y修饰的reg2则会直接从‘_’开始查找,所以返回null;
‘flags’
ES6中的新属性,可以获取到正则的修饰符
escape()
escape方法的主要作用是将字符串转为正则,其中需要转义的直接转义,该方法并未列入ES6/7的提案中,但如果有需求可以直接使用: