js正则表达式

正则表达式(Regular Expression),是用来规范字符串的一种表达式。可以对字符串进行查找、替换(删除和格式化)、切割和各种验证。

正则表达式——使用规则

1、最简单的正则表达式:关键词的原文

 

2、字符集:规定一个字符的规则     

[ab我]    表示在a,b,我三个选项中任意一个匹配成功

  如果备选字符列表中个别字符之间是连续的,可以使用“-”省略中间的字符。如:

        

        [0-9]:一位数字

        [a-z]:一位小写字母

        [A-Z]:一位大写字母

        [a-zA-Z]:以为字母

        [\u4e00-\u9fa5]:一位汉字

  字符集开头,如果使用了“^”表示除了“^”后的字符

 

3、预定义字符集:对常用字符集的简化标识  

            \d <==>  [0-9]  :一位数字

        \w  <==>  [0-9a-zA-Z_]  :以为字母,数字或下划线

        \s  : 一位空字符,包括换行、空格、制表符(tab)

        .   : 除回车换行外的任意一个字符

    以上预定义字符集中表示的字符集是固定的。

 

4、量词:规定字符集出现的次数

  4.1 量词一般用于字符集之后,默认修饰量词前一个字符集,有明确数量的量词:

      {m,n}  : 最少出现m次,最多n次

        如:1[3578]{3,6}  ,表示“[3578]”字符集中的3,5,7,8四个字符最少出现3次,最多出现6次

      {m,}  : 最少出现m次,没有上限

        如:1[3578]{3,6}  ,表示“[3578]”字符集中的3,5,7,8四个字符最少出现3次

      {m}  : 必须出现m次

        如银行卡密码:[0-9]{6}  ,表示只能是六位数字

  4.2 没有明确数量的量词

      ?  : 可有可无,最多出现一次

      *  : 可有可无,没有上限

      +  : 至少出现一次,没有上限

5、分组和选择

    选择:类似于程序中的“或”,用“|”表示,只要满足“|”符号两边的正则表达式任意一个正则即可。(正则中“|”的优先级最低)如: 15|8 ,表示匹配“15”或者“8”

    分组:用“()”表示,小括号“()”中内容表示一组,如果数量词放在“()”之后,则表示把“()”中内容看作一个整体,而量词用来修饰这个整体。

 

注意:正则中如果正文和正则保留符号冲突,可以用“\”转义。

 

6、指定匹配位置

  “^”:表示开始位置,一般用于正则表达式的开头,匹配开始位置的,表示以...开头

  “$”:结束位置前的,一般用于结尾,以...结尾

  如:  ^\s+  匹配开头位置的多个空字符

      \s+$  匹配结尾位置的多个空字符

      ^\s+|\s+$  匹配开头或结尾的空字符

  如果前有“^”,后有“$”,表示从头到尾完整匹配 ——验证

 

注意:只要是验证,都需要完全匹配,故前加“^”后加“$”

 

7、分组编号

  正则中每个“()”,正则都会对其自动生成从1开始的编号。如果后边想匹配和前面某个分组完全相同的内容,可用“\n”匹配,如:

    (\d)\1*  匹配相邻数字重复的字符

    (.)\1*  匹配和第一个字符完全相同的重复字符

  如:数组去重复,先将数组用join函数以“,,”为分隔符转为字符串。正则表达式如下:

(^|,)([^,])(,,\2)*

  解析:①第一部分:“(^|,)”,匹配开头有或者没有“,”;

       ②第二部分:“([^,])”:除了“,”以后的其他字符;

       ③第三部分:“(,,\2)”:表示第二部分后面有两个“,”和第二部分本身,第三部分会出现一次或多次。

  如:字符串“a,,a,,b,,c,,c,,c,,d,,d”使用正则查找后的结果是“a,,a”、“,c,,c,,c”和“,d,,d”

 

8、预判

  提前检查整个字符串是否符合个别要求,相当于“而且”,用“(?)”,如:

  密码强度的要求:8位字符,必须是字母、数字的组合;要求:1)至少包含一位大写字母;2)包含以为数字

  分析:1)判断不全由小写字母和数字组成。(说明可能包含大写字母或特殊符号)

(?![0-9a-z]+$)
// 从开头到结尾的字符是不是都满足要求,"?"表示从头开始;“+$”表示一直检查到结尾

 

     2)判断不全由字母(大写和小写)组成。(说明可能包含数字或特殊符号)

(?![a-zA-Z]+$)

     3)只能由数字和字母组成。(排除特殊符号)

[0-9a-zA-Z]{8}

     4)最后结果:

(?![0-9a-z]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{8}

 

9、正则应用示例

    (1) 身份证号,共15位或18位:1)前15位数字;2)接着2位数字;3)最后一位,可能是数字、X或x中的任意一个;4)最后三位为一组,可有可无,最多出现一次。结果:

\d{15}(\d{2}[0-9Xx])?

 

    (2) 手机号:1)+86或0086,整体可有可无,最多出现1次;2)空字符,可有可无,最多不限;3)[34578];4)9位数字,结果:

(\+86|0086)?\s*1[34578]\d{9}

 

 

 

    

posted @ 2017-02-23 18:13  Joyce-Chen  阅读(399)  评论(0)    收藏  举报