js

正则表达式知识点梳理

正则

Posted by Joubn on June 6, 2018 PV: -

“The wise man is always a good listener. ”

推荐

首先还是推荐阮一峰关于RegExp对象的教程。比较全面和易懂。

自己也整理了一下比较常用的一些知识点:

新建正则表达式

var regex = /xyz/; var regex = /xyz/i
//等价于:
var regex = new RegExp('xyz'); var regex = new RegExp('xyz','i')

正则对象属性

1.与修饰符相关属性(global,ignoreCase,multiline):返回布尔值
2.与修饰符无关(lastIndex,source(返回正则表达式字符串形式))

正则对象方法

test(): 返回布尔值。当前模式是否匹配表达式
new RegExp(r).test(str)

exec(): 返回匹配结果。两个属性(index,input)
new RegExp(r).exec(str)

与正则相关的字符串方法

String.prototype.match(reg)  //返回数组包含全部匹配子字符串
String.prototype.search(reg) //按照正则表达进行搜索,返回一个整数,匹配开始的位置
String.prototype.replace(reg, replacement) //替换匹配成功的字符串
String.prototype.split(reg) //按规则进行字符串分割,返回分割的数组

匹配规则

字面量字符和元字符

(点字符 **.** ,位置字符 **^ & **,选择符 |  )

转义符 \

( ^、.、[、$、(、)、|、*、+、?、{和\\) 注意:用构造函数时要双斜杠 \\\

字符类:

- ^once          //表示该模式只匹配那些以once开头的字符串
- bucket$        //这个模式与"bucket"匹配,与"buckets"不匹配。
- ^bucket$       //字符^和$同时使用时,表示精确匹配(字符串与模式一样)
- ^[a-z][0-9]$   //匹配一个字母和数字组成的字符串,如t4,f3等
- [0-9\.\-]      //匹配所有的数字,句号和减号 
- [^\\\/\^]      //除了(\)(/)(^)之外的所有字符
- [ \f\r\t\n]    //匹配所有的白字符
+ ^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用^是,它表示”非”或”排除”的意思,常常用来剔除某个字符。 
+ ^[^0-9][0-9]$ 与”&5”、”g7”及”-2”是匹配的,但与”12”、”66”是不匹配的。
+ /^(Chapter|Section) [1-9][0-9]{0,1}$/ 替换使用 | 字符来允许在两个或多个替换选项之间进行选择

预定义模式:

- \d //匹配0-9之间的任一数字,相当于[0-9]。
- \D //匹配所有0-9以外的字符,相当于[^0-9]。
- \w //匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]。
- \W //除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]。
- \s //匹配空格(包括制表符、空格符、断行符等),相等于[\t\r\n\v\f]。
- \S //匹配非空格的字符,相当于[^\t\r\n\v\f]。
- \b //匹配词的边界。
- \B //匹配非词边界,即在词的内部。

常用应用场景

是否EMail

/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

密码强度

^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。

身份证号码

15位:^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$
18位:^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$

提取URL链接

^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?

提取网页中图片

\\< *[img][^\\\\>]*[src] *= *[\\"\\']{0,1}([^\\"\\'\\ >]*)

提取网页超链接

(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>

工具

又是划重点了。我离不开的正则工具regexper,谁用谁知道👍