正则表达式
菜鸟教程链接
菜鸟工具-正则表达式在线测试
菜鸟工具-前端工具
为什么要使用正则表达式?
- 测试字符串内的模式(数据验证)
- 替换文本
- 基于模式匹配从字符串中提取子字符串
语法概念了解
- 普通字符 - 包括显示指定为元字符的所有可打印和不可打印字符。如所有的大小写字母、所有数字、所有标点符号和其他符号等。
- 非打印字符 - 也是正则表达式的组成部分。 如:以下字符;
非打印字符 | 描述 |
---|
\f | 匹配换页符 |
\n | 匹配换行符 |
\r | 匹配回车符 |
\t | 匹配制表符 |
\v | 匹配垂直制表符 |
\s | 匹配任何空白符,包括空格、制表符、换页符等 |
\S | 匹配任何非空白符,等价于[^\f\n\r\t\v] |
- 特殊字符 - 一些有特殊含义的字符,通常要匹配这些特殊字符本身,需要在前面加斜杠(\)转义。
特殊字符 | 描述(如要匹配特殊字符本身,需要在前面加斜杠\转义) |
---|
^ | 匹配字符串的开始位置,在方括号中使用时例外,表示不接受该字符集合,如要匹配^字符本身,请使用^ |
$ | 匹配字符串的结尾位置,如要匹配$字符本身,请使用$ |
() | 标记一个表达式的开始和结束位置 |
* | 匹配前面的子表达式零次或多次,等价于限定符{0,} |
+ | 匹配前面的子表达式一次或多次,等价于限定符{1,} |
? | 匹配前面的子表达式零次或一次,等价于限定符{0,1} |
. | 匹配除换行符\n之外的任何单子符 |
[ | 标记一个中括号表达式的开始 |
{ | 标记限定符表达式的开始 |
| | 指明两项之间的一个选择 |
\ | 将下一个字符标记为或特殊字符、或原义子符、或向后引用、或八进制转义符。 |
- 限定符 - 用来指定正则表达式的一个给定组件必须要出现多少次才满足匹配。
限定符 | 描述 |
---|
* | 匹配前面的子表达式零次或多次,等价于限定符{0,} |
+ | 匹配前面的子表达式一次或多次,等价于限定符{1,} |
? | 匹配前面的子表达式零次或一次,等价于限定符{0,1} |
{n} | n是一个正整数,匹配确定的n次,如匹配"foot"中的两个o |
{n,} | n是一个正整数,至少匹配n次 |
{n,m} | n和m都是正整数,且n必须小于等于m,注意逗号和两个数之间不能有空格 |
注意1:如果限定符出现在范围表达式之后,则应用于整个范围表达式。
注意2:* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。 - 定位符 - 描述字符串或单词的边界,可以将正则表达式固定到行首或行尾。
定位符 | 描述 |
---|
^ | 匹配字符串开始的位置,如果设置了RegExp对象的Multiline属性,还会与\n或\r之后的位置匹配 |
$ | 匹配字符串结尾的位置,如果设置了RegExp对象的Multiline属性,还会与\n或\r之后的位置匹配 |
\b | 匹配一个单词边界,即字与空格间的位置 |
\B | 匹配非单词边界 |
注意:定位符与限定符不能一起使用,由于紧靠换行或者单词边界的前面或后面不能有一个以上的位置,因此不允许出现 ^* 之类的表达式 - 字符集 - 由方括号组成,作用匹配某些特定字符
字符集 | 描述(例子中x表示要匹配的任意字符) |
---|
[x] | 字符集合,匹配包含的任意一个字符。 |
[^x] | 负值字符集合,匹配未包含的任意字符 |
[a-z] | 字符范围,匹配指定范围的字符。如"[a-z]"可以匹配任意小写字母 |
[^a-z] | 负值字符范围,匹配任何不在指定范围的任意字符 |
- 分组 - 由圆括号组成,把匹配到的字符串分成若干个小组,所有获取的匹配可以从产生的Matches集合中得到。js中使用$0至$9属性获取
分组 | 描述(例子中x表示要匹配的任意字符) |
---|
(x) | 匹配x并获取这一匹配 |
(?:x) | 匹配x但不获取匹配结果。如:"industr(?:y|ies)"就是一个比"industry|industries"更简略的表达式 |
(?=x) | 正向肯定预查,非获取匹配。如:“Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的"Windows”,但不能匹配"Windows3.1"中的"Windows” |
(?!x) | 正向否定预查,非获取匹配。如:“Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows” |
(?<=x) | 反向肯定预查,与正向肯定预查类似,只是方向相反。如:"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。 |
(?<!x) | 反向否定预查,与正向否定预查类似,只是方向相反。 例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows" |
运算符的优先级
- 正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。
- 规则如下:
- 相同优先级的从左到右进行运算
- 不同优先级的运算先高后低
- 以下列表从最高到最低说明了各种正则表达式运算符的优先级顺序
运算符 | 描述 |
---|
\ | 转义符 |
(),(?: ),(?=),[] | 圆括号和方括号 |
*,+,?,{n},{n,},{n,m} | 限定符 |
^,$,\任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | 替换符,“或"操作符,字符具有高于替换运算符的优先级。如:“m|food"匹配"m"或"food”。若要匹配"mood"或"food”,请使用括号创建子表达式,从而产生"(m|f)ood"。 |