javascript正则表达式真是学了又忘忘了又学,今天好好梳理一下语法,本文附有十来个常见的匹配正则表达式代码示例与讲解,但是这种写正则的事情以后还是丢给chat哥吧
正则表达式语法
var reg = new RegExp('正则表达式','修饰符');
let expression = /pattern/flags
pattern 可以是任何简单或复杂的正则表达式, 每个正则表达式可以带0个或多个flags
这些flags可以是:
- i: ignoreCase, 匹配忽视大小写
- m: multiline , 多行匹配
- g: 全局匹配,即在目标字符串中按顺序找到满足匹配模式的所有子串
let pattern1 = /at/g
//匹配字符串中的所有‘at’
let pattern1 = /at/i
//匹配字符串中的所有‘at’,忽略大小写
- 横向模糊匹配:{m,n},表示连续出现最少m次,最多n次。比如/ab{2,5}c/表示匹配这样一个字符串:第一个字符是“a”,接下来是2到5个字符“b”,最后是字符“c”。
- 纵向模糊匹配:[abc],表示该字符是可以字符“a”、“b”、“c”中的任何一个。比如/a[123]b/可以匹配如下三种字符串:“a1b”、“a2b”、“a3b”。
- 范围表示法:-,比如[123456abcdefGHIJKLM],可以写成[1-6a-fG-M]。用连字符-来省略和简写。
- 排除字符组:,[abc],表示是一个除"a"、“b”、"c"之外的任意一个字符。
- 简写
-\d就是[0-9]。表示是一位数字。记忆方式:其英文是digit(数字)。
\D就是[^0-9]。表示除数字外的任意字符。
\w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w是word的简写,也称单词字符。
\W是[^0-9a-zA-Z_]。非单词字符。
\s是[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s是space character的首字母。
\S是[^ \t\v\n\r\f]。 非空白符。
.就是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号…中的每个点,都可以理解成占位符,表示任何类似的东西 - 量词
{m,} 表示至少出现m次。
{m} 等价于{m,m},表示出现m次。
?等价于{0,1},表示出现或者不出现。惰性匹配:量词后面加?
+等价于{1,},表示出现至少一次。
*等价于{0,},表示出现任意次,有可能不出现。 - 分支结构:|:要匹配"good"和"nice"可以使用/good|nice/,惰性
- \b是单词边界,具体就是\w和\W之间的位置,也包括\w和^之间的位置,也包括\w和$之间的位置。
- ^(脱字符)匹配开头,在多行匹配中匹配行开头。
- $(美元符号)匹配结尾,在多行匹配中匹配行结尾。
- (?=p),其中p是一个子模式,即p前面的位置。
- (?!p)就是(?=p)的反面意思
正则默认是贪婪匹配,也就是匹配能匹配到的最长的字符串,如
/<.+>
匹配<span><br>this</b></span>
,会匹配到<span><br>this</b></span>
这整个字符串,我们可以用?来改成懒惰匹配,尽可能少的匹配字符,匹配结果为<span>
,<br>
,</br>
,</span>
代码示例
整数或者最多两位小数
^[0-9]+\.{0,1}[0-9]{0,2}$
^:模式匹配从字符串的起始位置开始
[0-9] 表示匹配数字(0 到 9)。
+等价于{1,},表示出现至少一次。
因此,^[0-9]+的意思为,匹配整数部分,字符串的开头必须由至少一个整数组成
\为转义字符,因为点号在正则表达式中有特殊含义。
{0,1}的意思为出现0或1次
.{0,1}表示匹配零个或一个点号(小数点)
[0-9]{0,2}$ 意为在字符串的结尾部分匹配零个到两个数字(0 到 9)。
只能输入数字
^[0-9]*$
* 表示匹配零个或多个
只能输入n位的数字
^\d{n}$
{n}只能出现n次
只能输入至少n位的数字
^\d{n,}$
{n,}至少出现n次
只能输入非零的正整数
^\+?[1-9][0-9]*$
?: 表示该子组是可选的,可以出现零次或一次。
只能输入由26个英文字母组成的字符串
^[A-Za-z]+$
[A-Za-z] 是一个字符类,用于匹配任意一个大写或小写英文字母。
[A-Z] 匹配任意一个大写英文字母。
[a-z] 匹配任意一个小写英文字母。
只能输入由数字、26个英文字母或者下划线组成的字符串
^\w+$
\w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线
以字母开头,长度在6~18之间,只能包含字符、数字和下划线
^[a-zA-Z]\w{5,17}$
只能输入汉字
^[\u4e00-\u9fa5]{0,}$
验证Email地址
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
^\w+:邮箱必须以数字、大小写字母和下划线开头
([-+.]\w+): 匹配含- + . 的字符串 ,例如connect.hku
@: 匹配@号
\w+:@号后必须是字符
([-.]\w+):匹配含 - . 的字符串
.: 匹配点
\w+:点后必须是字符
([-.]\w+)*$:以含 - . 的字符串结尾
*:可以出现0次或多次
举例:test@example.com:匹配,
匹配首尾空白字符
^\s*|\s*$
| 表示逻辑上的或,用于分隔两个模式。
匹配网址URL的正则表达式
[a-zA-z]+://[^\s]*
[^\s]* 匹配零个或多个非空白字符。
匹配以字母开头,后跟 “冒号斜杠斜杠”,然后是零个或多个非空白字符的字符串.举例https://www.example.com,匹配
校验密码强度
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
(?=…) 是正向肯定预查的语法,表示在当前位置向后查找匹配括号内的表达式。
.:匹配除换行符外的任意一个字符。
.* 表示匹配任意数量的字符(除换行符外)。
(?=.\d) 表达式的含义是:在当前位置向后查找,如果存在至少一个数字,则匹配成功。当前位置是在匹配的起始位置(^)之后。
(?=.[a-z]) 表示使用正向肯定预查来匹配至少一个小写字母。当前位置是在匹配的起始位置(^)之后。
(?=.*[A-Z]) 表示使用正向肯定预查来匹配至少一个大写字母。当前位置是在匹配的起始位置(^)之后。
包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。