正则表达式
正则就是对字符串进行查找、匹配、替换等操作的一串“规则字符串”
使用方法:在一对斜杠之间添加正则表达式 如:/ 正则表达式 /
正则表达式的组成
- 普通字符
- 特殊字符(元字符):正则表达式中具有特殊意义的字符
元字符
\d | 表示数字 |
---|---|
\D | 非数字 |
\s | 空格符 |
\S | 非空格符 |
\w | 字母或数字或下划线 |
\W | 非字母、数字、下划线 |
. | 任意字符(不包含换行符) |
\b | 单词边界 |
实例1:
1 | var reg = /\d/; //新建一个正则对象 |
限定符
限定之前表达式出现的次数
* | 重复0次或多次 |
---|---|
+ | 重复1次或多次 |
? | 重复0次或1次 |
{n} | 重复n次 (连续) |
{n,} | 重复至少n次 (连续) |
{n,m} | 重复n到m次 (连续) |
1 | var reg = /\d*/; |
1 | var reg = /\d+/; |
1 | var reg = /\d?/; |
1 | var reg = /\d{2}/;//{n} |
1 | var reg = /\d{2,}/;//{n,} //同样存在以上问题 |
1 | var reg = /\d{2,6}/;//{n,m} //同样存在以上问题 |
范围符[ ]
1、[a-z]、[A-Z]、[0-9],也可以综合写成[a-zA-Z0-9];当然这范围是自己定义的,比如[a-b],范围是a到b。
2、[\u4e00-\u9fa5] 匹配汉字的范围 其中\u4e00,\u9fa5是中日韩汉字Unicode表中对应的编码 4e00对应“一” 9fa5对应“龥”
3、[ab5&@],仅匹配 a 或 b 或 5 或 & 或 @
4、[^ab5&@] 匹配除 a 或 b 或 5 或 & 或 @之外的内容 (注意此处^是在[ ]内的,区别于开始符^,两者所处位置不同)
5、3 | a 匹配3或者a字符
开始结束符号
^ | 开始符(强制规定匹配开始的地方) |
---|---|
$ | 结束符(强制规定匹配结束的地方) |
实例:
1 | ^\d 字符串要以数字开始,数字只能出现一次 |
我们来解释 var reg = /\d?/; 例子中出现的问题
1 | var reg = /\d?/; |
我们来解释 var reg = /\d{2}/; 例子中出现的问题
1 | var reg = /\d{2}/;//{n} |
正则对象的创建方式
1、new RegExp()
RegExp(reg,msg) 参数一:正则表达式
参数二:附加条件(如:i 忽略大小写,g 全局匹配)
实例:
1 | var reg = new RegExp('\\w+','ig'); //注意,此处第一个\是转义字符,因为参数一不能直接传入正则表达式 |
2、简写
1 | var reg = /[a-z]/ig; |
正则对象的方法
RegExp.test(‘字符串’); 判断字符串知否满足正则表达式 返回布尔值
RegExp.exec(‘字符串’); 判断字符串知否满足正则表达式 将找到的内容以数组的形式返回
1、不使用 “g
“ 标志时,每次都返回第一个找的内容 而不继续向后查找
2、当正则表达式使用 “g
“ 标志时,可以多次执行 exec
方法来查找同一个字符串中的成功匹配。当你这样做时,查找将从正则表达式的 lastIndex
属性指定的位置开始
lastIndex:
只有正则表达式使用了表示全局检索的 “g
“ 标志时,该属性才会起作用。此时应用下面的规则:
- 如果
lastIndex
大于字符串的长度,则regexp.test
和regexp.exec
将会匹配失败,然后lastIndex
被设置为 0。 - 如果
lastIndex
等于字符串的长度,且该正则表达式匹配空字符串,则该正则表达式匹配从lastIndex
开始的字符串。(then the regular expression matches input starting atlastIndex
.) - 如果
lastIndex
等于字符串的长度,且该正则表达式不匹配空字符串 ,则该正则表达式不匹配字符串,lastIndex
被设置为 0.。 - 否则,
lastIndex
被设置为紧随最近一次成功匹配的下一个位置。
实例:
1 | //找出所有三个英文字母组成的 并且以A开头的单词 |
该函数运行的实质:exec每一次执行都有开始位置,而这个开始位置是由RegExp对象的lastIndex属性值所决定的;
以下为该段代码的执行顺序与解析:
1 | 1、reg.lastIndex 的初始值为0 |
懒惰模式与贪婪模式
懒惰模式:在满足条件的前提下,尽可能少的匹配字符
贪婪模式:在满足条件的前提下,尽可能多的匹配字符
正则表达式的量词有:* + ? {}
量词默认是贪婪模式,当在量词之后加上?时,将贪婪模式转换为懒惰模式。
分组提取
正则中()表示分组
若存在
1 | ((((a))((b)))(c)) |
则第一组;(((a))((b)))(c)
第二组:((a))
第三组:(a)
第四组:(b)
第五组:(c)
找法:从左往右找左括号(
实例:
1 | var reg = /((\d+)(\w+))/; |
字符串中正则的使用
方法:
String.match(正则对象) | 返回符合正则条件的集合 |
---|---|
String.replace(正则对象,”替换的字符串”) | 替换字符串,若要全局替换,正则对象要加g |
String.search(正则对象) | 查找字符串,返回查找内容的第一次出现的位置 |
String.split(正则对象) | 切割字符串,返回切割后的数组 |
1 | //match |
1 | //replace |
1 | //search |
1 | //split |
最后更新: 2019年05月15日 14:02