正则

一.基本语法

原子:
\d    匹配数字0-9

\D    匹配非数字

\w    匹配a-z0-9A-Z  只要满足是英文字母和数字

\W    匹配任何非字母数字的, 比如汉子

\s    匹配空白区域,包括制表符

\S    匹配非空格区域

    
元字符:
/./    匹配任意字符,换行符除外, <!-- . --> 匹配一个注释 里面包含任意字符

|      逻辑运算符" 或 ",如    /黄色网址|海洛因|冰毒|罂粟/ 


原子表:
[]    匹配其中的任意一个字符,如    [汪张赵李金] 这里匹配的是 原子表里面,汪 , 张, 赵 , 李 , 金 他只匹配一个,若是有任何一个满足就返回true ,它自带" 或 " 的意思,不需要再加" | "

^     逻辑运算符" 非 ",如[^汪赵李]这里表示只要不满足一个字符是汪,赵,李,就返回true

[0-9] 匹配0-9的任意一个数字,同样的写法还有[6-9],[a-z],[A-Z] 等


量词: 用来修饰原子  的重复次数
        格式为: 原子{量词}
{n,m}    重复n到m次                            \d{1,9}     表示匹配1位到9位的数字,这里指的是数字的个数

{n,}       重复n或者更多次                    \d{2,}       至少得有两个数字  

{n}        重复n次                                   \d{2}       表示至少得有n个数字

*           重复0次或者更多次                 \d*          表示任意个数的数字,0个 或者任意个

?          重复0次或者一次                     \d?         表示得数字个数为0个或者1个

+          重复至少一次,可以更多次       \d+         表示至少一个           

正则表达式是没有逻辑性的的,误伤率特别大

二.贪婪与止贪婪

1. 正则的贪婪特性举例
       要求匹配字符串<p>asdadaxxxxxxx</p><p></p>,使用的正则表达式为:/<p>.*<\/p>/  
   这段表达式" .* " 的意思是匹配任意字符,任意次数,   那么正则默认匹配到的数据是蓝色部分的字符, 虽然字符中也包括</p>,但是正则并没有因此而止;
   
2. 止贪婪的方法
   按照上面的例子,正则的贪婪特性主要是因为有量词" * " ,它表示任意的字符,  在量词后面加上" ? ",表示匹配尽可能少的字符, 这就是正则的止贪婪;

   举例:匹配字母n后面有至少2个最多8个数字,使用的正则表达式为:/n\d{2,8}/
   这段表达式n的意思是匹配字母n \d{2,8} 的意思是匹配最低2位数,最大8位数的数字, 因为正则有贪婪的特性,所以他会匹配最大的个数,如果一个满足条件
       的数字有9位数,那么正则会匹配到8位止, /n\d{2,8}?/将正则修改为这样,那么正则在匹配到2位数字的时候就会停止匹配,这种做法叫做止贪婪;
 

三.边界匹配

1. 正则的边界匹配举例:要求检测输入内容是否为手机号的正则表达式为:/1\d{10}/
   这时候用户输入一段字符串:我的手机号是:"19999999999", 和我们想要的单纯的手机号格式不匹配,但是正则还是会返回true,因为它这串字符串中包含正则能
   够判断的字符串"19999999999", 这是错误的,应该指定正则开始匹配的位置的.

   /^1\d{10}$/ /^$/  这两个符号风别表示开头和结尾, " ^ " 表示从字符串的开头进行匹配, " $ "表示匹配到结尾,和^搭配使用就行,个人感觉鸡肋;
       边界匹配主要是面向用户












posted @ 2018-09-22 21:15  觥筹啊觥筹  阅读(495)  评论(0编辑  收藏  举报