特殊字符和转义序列

1、[...] 位于括号内的任意字符            

    /[abcde]/.test('aboot');     // 只要含有任意一个字符返回 true

    /a[bo]t/.test('abot');        // false 中间只能含有其中一个字符,匹配'abt'或'aot'

2、[^...] 不在括号中之中的任意字符

    /a[^bo]t/.test('ast');        // true a|t之间不含有b、o期中一个字符

*3、. 除了换行和Unicode行止符之外的任意字符

    /a.t/.test('a*t');        // true , 'a\nt'换行false,使用 \.来进行转义

4、\w 任何ASCII字符,等于[a-zA-Z0-9_]

    /\w/.test('think');        // true, 不含有其它字符

5、\W 任何非ASCII字符单字字符,等于[^a-zA-Z0-9_]

    /\w/.test('think');        // false, 至少需要有一个特殊字符

6、\s 任何空格

    /\s/.test('I think');    // true

7、\S 不包含空格

    /\s/.test('I think');    // false, 非空格为true

8、\d 任何数字,等于[0-9]

9、\D 除了数字之外的任意字符

10、\b 单词边界

    例: 匹配 hi 这个词,如果写成 /hi/ 这样 'wordhibiry are you' 也会匹配,如果加\b会单词的分界空格处来匹配, /hi\b/.test('word hi biry are you');  true

11、\B 非单词边界 

指定匹配的位置

1、^ 匹配字符串的开头

    /^ab/.test('absolute');        // true 以ab开头

2、$ 匹配字符串的结尾

    /te$/.test('absolute');        // true 以te结尾

* 3、? ! 一个反前向声明者,含义与反前向声明相反

选择、分组和引用

1、| 用于分隔选择的字符,相当于或

    /oa|on|op/.test('option');    // true,只要带有oa、on、op都匹配

2、(...) 分组,相当于并且

    /(\d+&)([a-zA-Z]+%)/.test('1234&abcde%');        // true, 必须包含数据+&,并且还包含英文字母+%

* 3、(?...) 只组合,把项组合到一个单元,但不记忆与该组匹配的字符

    (?:):

    (?!):

    (?<=):

    (?<!):

重复

1、{ } 匹配一个字符的重复  **** 注意{3,10} 逗号后不能有空格, 如{3, 10}        

    /^\d{1,3}$/: 最少2个数字,最多4个数字

    /^\d{4,}$/: 最少有4个数字

    /^\d{4}$/: 只能有4个数字

2、* 表示0次或多次重复,等价于{0, }    /^\d*$/

3、?最少0次, 最多1次重复,等价于{0,1}   

4、+ 表示最少出现1次,等价于{1,}

5、\1、\2 重复的子项

    var reg = /(a)(b)(c)\1/;
    var str = "abca";

    // 返回 true: \1是重复第一个子项(a),相当于/(a)(b)(c)(a)/.     \2就是第二项(b)
    console.log(reg.test(str));

修饰符,高级匹配

1、g 匹配的是全局,检索字符串的所有匹配

    如果不加g只匹配第一个后就退出

    let reg = /你妈的|去你妈|傻逼/g;
    let content = '你妈的房子傻逼是用来住的你妈的不是用来炒的去你妈的吧';
    content = content.replace(reg, '***');
    console.log(content)            // ***房子***是用来住的***不是用来炒的***的吧

2、i 匹配忽略大小写

    /java/i.test('JavdaScript');        // true

3、m 进行多行匹配

常用方法

1、match(reg) 将匹配结果返回一个数组

    var arr = '123kasdo34kk234k234234k'.match(/\d+/g);        // 如果不加g,只返回第一个
    console.log(arr);        // ["123", "34", "234", "234234"]

2、test() 如果没有匹配返回false否则返回true

3、search(reg) 查找并返回所在的位置,如果没有匹配的返回-1

    var result = '房地产行业究竟是白银时代还是钻石时代'.search(/钻石/); 
    console.log(result);        // 返回 8

4、content.replace(reg, str) 用于执行检索和替换操作

5、exec() [ɪɡ'zek] 如果找到返回一个数组并存放匹配的结果,如果没有找到返回null

    var result = /白银|钻石/g.exec('房地产行业究竟是白银时代还是钻石时代'); 
    console.log(result);        // ['']

整理经验

1、如果检查全部需要前后加匹配

    /\d+/  只对字符中存在数字就匹配

    /^\d+$/  对字符中全部为数字的进行匹配


2、test()、exec()是对每一个字符串进行匹配,如果为true就不会往下执行,并返回true

    例如: 匹配字符中不能带有.字符
    /[^\.]/.test('123123.');    // 返回true,因为第一个字符就不是.返回true不在往下执行

    /[\.]/.test('23412.34');    // 如果存在就返回true
    或者
    /^[^\.]$/g.test('asdfa.sdf') // 返回true

3、| 或符号只能用到()中,不能在[]中使用

常用示例

1、密码强度

    // 弱密码 - 纯数字、纯字母或纯特殊字符
    /^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+)$/

    // 中密码 - 字母+数字,字母+特殊字符,数字+特殊字符
    /^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$/

    // 强密码 - 必须有数字、小写字母、大写字母和特殊字符
    /^(?=.*((?=[!@#$%^&*_]+)[^A-Za-z0-9]))(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[^\u4e00-\u9fa5]{8,16}$/


2、手机号码验证

    /^(139|138|137|136|135|134|178|170|188|187|183|182|159|158|157|152|150|147|139|186|185|170|156|155|130|131|132|189|180|170|153|133)(\d){8}$/.test('13012345678')

    移动号段: /^(139|138|137|136|135|134|178|170|188|187|183|182|159|158|157|152|150|147|139)(\d){8}$/;     

    联通号段: /^(186|185|170|156|155|130|131|132)(\d){8}$/

    电信号段: /^(189|180|170|153|133)(\d){8}$/


3、验证Email - /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

4、验证中文 - /^[\u4e00-\u9fa5]+$/

5、域名验证 - /^(http(s)?:\/\/)(www)?\.\w+\.(com|cn|net|org)$/

6、手机号前带86或是+86 - /^((\+86)|(86))?(13)\d{9}$/

7、电话号码与手机号码同时验证 - /(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})/

8、验证IP地址 - /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/;    //  匹配0-255, 匹配'255.255.255.255'

9、邮政编码 - /[1-9]{1}(\d+){5}/

10、身份证号码 - /\d{18}|\d{15}/

11、双字节字符串(汉字) - /[^\x00-\xff]*/

12、去除两端空格 - /^\s*|\s*$/

数字正则

    /^\d+$/ - 非负整数(正整数 + 0)

    /^[1-9](\d)+$/ - 正整数(不可以以0开头)  

    /^-(\d)+$/ - 非正整数(负整数 + 0) 

    /^-[1-9]?(\d){0,}$/ - 负整数(-12345), 不可以-012312

    /^[1-9]?(\d)+\.(\d)+$/ - 浮点数   

    /^[+-]?\d+(\.\d{1,2})?$/ - 可以是整数 或 浮点数,并且小数点只能后两位

    ^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$    //正浮点数   
    ^((-\\d+(  //非正浮点数(负浮点数 + 0)   
    ^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //负浮点数  

    /^[A-Za-z]+$/ - 由26个英文字母组成的字符串   

    /^[A-Z]+$/ - 由26个英文字母的大写组成的字符串   

    /^[a-z]+$/ - 由26个英文字母的小写组成的字符串  

    /^[A-Za-z0-9]+$/ - 由数字和26个英文字母组成的字符串   

    /^\w+$/ - 由数字、26个英文字母或者下划线组成的字符串