本质:用来记录规则的代码
应用领域:表单验证、高级搜索
创建正则表达式对象:var 变量名= new RegExp(/表达式/);
使用直接量的方式:var 变量名= /表达式/;
基本预定义类
实用网站:正则验证应用
- [^\n\r] 除了换行和回车之外的任意字符
- \d [0-9] 数字字符digit
- \D [^0-9] 非数字字符
- \w [a-zA-Z0-9_] 单词字符(所有的字母数字和_) word
- \W [^a-zA-Z0-9_] 非单词字符
- \s [\f\r\n\t\v] 不可见字符 space
- \S [^\f\r\n\t\v] 可见字符
字符类
- 或 : “ | ”
- [ ]:表示一个字符的位置 [ ] 中的内容表示可以出现的内容
- 简单类:[ ] 定义此字符可以出现的字符选择
- 负向类:[^ ] 表示该位置不能出现的字符
- 范围类:[a-z] 表示一段字符区间
- 组合类:[A-Ga-f0-7] 表示能出现字符的并集
边界和量词
- 边界:
- ^:只限定开头(写在[ ]中代表非)
- $:只限定结尾
- 开头结尾都限制:/^表达式$/ 严格模式 必须是要求的
- 量词:
- “*”:重复零次或更多 x>=0
- “+”:重复一次或更多次 x>=1
- “?”:重复零次或一次 x=(0||1)
- {n}: n次 x=n
- {n,}:重复n次或更多 x>=n
- {n,m}:重复出现的次数比n多但比m少 n<=x<=m
括号总结
- { }是量词中自定义出现次数,修饰的是紧挨着的字符
- [ ]表示一个字符的位置,里面写的是这个位置可以出现的内容
- ( )提高优先级,具有分组功能,小括号中的是一组
方法
- test()验证是否存在
re.test(str) - exec 提取
作用:将匹配到的内容提取出来
语法:正则对象.exec(‘字符串’) 返回一个装提取到的内容对象的数组
如果需要全部提取,则需要全局模式开启
1.需要开启正则的全局模式
var r = new RegExp('正则','g');
var r = /正则/g;
2.循环调用exec 直到返回null
如:
eg: 从‘abc123ddds567sss789lkj’中提取数字
var str = ‘abc123ddds567sss789lkj’;
// 1.全局模式
var regexp = /\d+/g;
// 2.循环匹配
var result;
while(result = regexp.exec(str)){
console.log(result);
}
/*每次匹配到的都是一个数组,数组中的第0项是匹配内容的对象*/
3.分组提取
- 将匹配到的结果进行解析,在正则中使用括号()进行分组,那么得到的结果将会是一个数组,数组的长度是正则中左括号出现的次数+1,第0项数据是整个正则的匹配结果,后续项分别是每一对括号匹配到的数据,其中从左向右出现的左括号分别被编号1,2,3…
4.匹配但不捕获元字符
在组中添加?:后,依旧会去匹配这个组,但是不会出现在结果中
5.反向引用
- 在正则表达式中使用组匹配到某一个数据,可以在该正则表达式中使用‘\数字’的方式引用该组,数字代表被引用组的编号
6.贪婪模式
凡是在正则表达式中, 涉及到次数限定的, 一般默认都是尽可能的多匹配.
取消贪婪模式. 在次数限定符后面加上 ?
注意: 贪婪模式性能会略高于非贪婪模式, 所以开发的时候. 一般不考虑贪婪的问题
只有代码匹配结果出现问题了, 一般一次多匹配了, 才会取消贪婪
- 多个贪婪在一起的时候的强度:第一个最强 后面强度一样
/(\d+)(\d+)(\d+)/.exec('1234567');
'12345','6','7'
- 取消贪婪模式
/(\d+?)(\d+)(\d+)/.exec('1234567');
'1','23456','7'