1 修饰词
i忽略大小写g全局匹配m把\n识别为多行
2 元字符
\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符”n”。”\n”匹配一个换行符。串行”\“匹配”\”而”(“则匹配”(“[abc]中括号的任意一个字符,有点像更大范围的逻辑或。[^abc]除了中括号中的任意一个字符(abc)必须完全包含abc,这三个字符,有点像更大范围的逻辑与。|逻辑或,x|y 匹配x或y。例如,“z|food”能匹配”z”或”food”。”(z|f)ood”则匹配”zood”或”food”。.匹配除“\n”之外的任何单个字符。要匹配包括”\n”在内的任何字符,请使用像”(.|\n)”的模式。\w任意一个字母、数字或下划线\W任意一个非字母、数字和下划线\d任意一个数字\D任意一个非数字\s任意一个空格\S任意一个非空格\b单词边界\B非单词边界\n代表换行符\ttab缩进
1 | //举个栗子 |
3 量词
+1个或多个*任意多个?1个或0个{3}3个{3,5}3个到5个{3,}3个以上^行首,匹配输入字符串的开始位置,如果设置了RegExp对象的Multiline属性,^也匹配“\n”或”\r”之后的位置。$行尾,匹配输入字符串的结束位置,如果设置了RegExp对象的Multiline属性,$也匹配“\n”或”\r”之前的位置。?=a后面紧挨a的?!a后面不紧挨a的(?=pattern)正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。(?!pattern)正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始(?<=pattern)反向肯定预查,与正向肯定预查类拟,只是方向相反。(?<!pattern)反向否定预查,与正向否定预查类拟,只是方向相反。
1 | //举个栗子 |
小提示:获取匹配和非获取匹配的区别
获取匹配的意思是,如果字符串匹配到正则规范,则会返回正则中的所有内容,如上面案例中的案例一。非获取匹配的意思是,如果字符串匹配到正则规范,则会返回正则中的非括号内的内容,如上面案例中的案例二。
4 相关方法
js中使用正则的字符对象的方法
- search(regexp);
- match(regexp);
- replace(regexp,str);
- split(regexp);
5 正则实例
5.1 匹配139开头的电话号码
1 | var phone1='13998675896'; |
5.2 匹配邮箱格式
1 | // \w 任意一个字母、数字或下划线 |
5.3 替换日期格式
将以\分割的日期转化成以-分割的日期格式
1 | var date1='2017/11/21'; |
5.4 检测一百以内数
检测0到100两位小数的正则不包含0包含100(包含三位小数)
1 | var num1 ="11"; |
5.5 返回字符串中括号内文字
1 | var str1 ="dddd(sdfsdfs)"; |
5.6 检测上传文件名
需要检测上传文件路径中,是否都是同一文件名不同格式的多个文件
1 | function checkUnique(filePath){ |
5.7 检测上传文件格式
需要检测上传文件路径中,是否包含了所有要求上传的文件格式
1 | function checkContainer(filePath){ |
6 完整速查表
| 字符 | 描述 |
|---|---|
| \ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,n匹配字符n。\n匹配一个换行符。串行\\匹配\而\(则匹配(。 |
| ^ | 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配\n或\r之后的位置。 |
| $ | 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配\n或\r之前的位置。 |
| * | 匹配前面的子表达式零次或多次。例如,zo*能匹配z以及zoo。*等价于{0,}。 |
| + | 匹配前面的子表达式一次或多次。例如,zo+能匹配zo以及”zoo“,但不能匹配z。+等价于{1,}。 |
| ? | 匹配前面的子表达式零次或一次。例如,do(es)?可以匹配does或does中的do。?等价于{0,1}。 |
| {n} | n是一个非负整数。匹配确定的n次。例如,o{2}不能匹配Bob中的o,但是能匹配food中的两个o。 |
| {n,} | n是一个非负整数。至少匹配n次。例如,o{2,}不能匹配Bob中的o,但能匹配foooood中的所有o。o{1,}等价于o+。o{0,}则等价于o*。 |
| {n,m} | m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,o{1,3}将匹配fooooood中的前三个o。o{0,1}等价于o?。请注意在逗号和两个数之间不能有空格。 |
| ? | 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串oooo,o+?将匹配单个o,而o+将匹配所有o。 |
| . | 匹配除\n之外的任何单个字符。 |
| (pattern) | 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用\(或\)。 |
(?:pattern) |
匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。 |
(?=pattern) |
正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 |
(?!pattern) |
正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 |
(?<=pattern) |
反向肯定预查,与正向肯定预查类拟,只是方向相反。 |
(?<!pattern) |
反向否定预查,与正向否定预查类拟,只是方向相反。 |
| [xyz] | 字符集合。匹配所包含的任意一个字符。例如,[abc]可以匹配plain中的a。 |
| [^xyz] | 负值字符集合。匹配未包含的任意字符。例如,[^abc]可以匹配plain中的p。 |
| [a-z] | 字符范围。匹配指定范围内的任意字符。例如,[a-z]可以匹配a到z范围内的任意小写字母字符。 |
| [^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。例如,[^a-z]可以匹配任何不在a到z范围内的任意字符。 |
| \b | 匹配一个单词边界,也就是指单词和空格间的位置。例如,er\b可以匹配never中的er,但不能匹配verb中的er。 |
| \B | 匹配非单词边界。er\B能匹配verb中的er,但不能匹配never中的er。 |
| \cx | 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的c字符。 |
| \d | 匹配一个数字字符。等价于[0-9]。 |
| \D | 匹配一个非数字字符。等价于[^0-9]。 |
| \f | 匹配一个换页符。等价于\x0c和\cL。 |
| \n | 匹配一个换行符。等价于\x0a和\cJ。 |
| \r | 匹配一个回车符。等价于\x0d和\cM。 |
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。 |
| \S | 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。 |
| \t | 匹配一个制表符。等价于\x09和\cI。 |
| \v | 匹配一个垂直制表符。等价于\x0b和\cK。 |
| \w | 匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]。 |
| \W | 匹配任何非单词字符。等价于[^A-Za-z0-9_]。 |
| \xn | 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,\x41匹配A。\x041则等价于\x04&1。正则表达式中可以使用ASCII编码。 |
| \num | 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,(.)\1匹配两个连续的相同字符。 |
| \n | 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。 |
| \nm | 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。 |
| \nml | 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。 |
| \un | 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。 |
7 特殊值正则转换表
1 | var strString = "hello watermelon"; |
| 原始值 | 使用方法 | 转化值 |
|---|---|---|
| true | new RegExp(true) | /true/ |
| false | new RegExp(false) | /false/ |
| undefined | new RegExp(undefined) | /(?:)/ |
| null | new RegExp(null) | /null/ |
| NaN | new RegExp(NaN) | /NaN/ |
| { name: ‘Wu Eva’ } | new RegExp(oo) | /[object Object]/ |
| [String: ‘hello world’] | new RegExp(oString) | /hello world/ |
| [Boolean: true] | new RegExp(oBool) | /true/ |
| [Number: 68] | new RegExp(oNum) | /68/ |
| oDate | new RegExp(oDate) | /Thu Dec 21 2017 19:39:40 GMT+0800 (中国标准时间)/ |
Number.MAX_VALUE |
new RegExp(Number.MAX_VALUE) | /1.7976931348623157e+308/ |
Number.MIN_VALUE |
new RegExp(Number.MIN_VALUE) | /5e-324/ |
| Number.NaN | new RegExp(Number.NaN) | /NaN/ |
Number.NEGATIVE_INFINITY |
new RegExp(Number.NEGATIVE_INFINITY) | /-Infinity/ |
Number.POSITIVE_INFINITY |
new RegExp(Number.POSITIVE_INFINITY) | /Infinity/ |
8 常用正则表达式
- 用户名
/^[a-z0-9_-]{3,16}$/
- 密码
/^[a-z0-9_-]{6,18}$/
- 十六进制值
/^#?([a-f0-9]{6}|[a-f0-9]{3})$/
- 电子邮箱
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/
- URL
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
- IP 地址
/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
- HTML 标签
/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/
- 删除代码\注释
/(?<!http:|\S)//.*$/
- Unicode编码中的汉字范围
/^[\u2E80-\u9FFF]+$/