正则学习

1.介绍
作用
1.表单验证
2.模板引擎 dd 也需要正则替换
3.前端自动化
正则表达式,又称规则表达式。(英语Regular Expression,在代码中常简写为regex、regexp或者RE)计算机科学的一个概念。正则表通常被用来检索、替换 那些符合某个模式(规格)的文本。
历史沿革
1956年 《神经网事件的表示法》  
1971年 正则表达式被引入  UNIX系统
1984年 office系列软件  开始使用正则 
1995年 java 引入正则
正则表达式引擎
DFA(根据变量查询) 
awk egrep flex ex MySQL procmail 
NFA 
NU Emacs java less Net语言 Perl PHP Python Ruby 
POSIX NFA 
服务器用引擎
实践
2.匹配与非匹配
匹配
例子:the tha ta te  
.                                                                  // 代表一个字符 
例子:       th.                                              //开头是th开头的   tha   the  
如果真查点,需要转译符   \.                          //就能找到真正的点
.属于元字符
例子:
sales1.xls     orders.xls      sales2.xls    sales3.xls      apac1.xls   europe2.xls      na1.xls      na2.xls      sa1.xls      ca1.xls  
(1)    [0123456789]\.xls   找到     1.xls     2.xls    3.xls     2.xls    1.xls    2.xls   1.xls    1.xls  []是用于匹配的
(2)    [e]s[0-9]\.xls          [0123456789]如果嫌麻烦  就改成 0-9  找到 es1.xls    es2.xls    es3.xls
(3)    [A-Z] [a-z] [0-9]      [A-Za-z0-9]  数字字母        
反匹配
^
[^0-9]\.xls     匹配的话 s.xls   就没有匹配到  因为 ^
3. 元字符
(1)例子:#ff6600
         解答   #[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]
(2)元字符  不可以出现在查询中   如果要出现 需要进行转义
         例子:result +  ' \r'
         解答:result \+  \' \\r\'       
(3) \n       匹配一个换行符。
例子to learn.
                        //有换行
解答: learn\.\n
(4)\d       匹配一个数字数字              等价于   [0-9]
        \D       匹配一个非数字字符           等价于   [^0-9]
(5)\w      匹配包括下划线的任何字符 等价于 ‘[A-Za-z0-9_]’
        \W      匹配任何 单词字符           等价于   '[^A-Za-z0-9_]’
        例子:772_
        解答:\d\d\d\w
(6)\s      匹配任何空白字符,包括空格制表符、换页符等
         \S     匹配任何非空白字符     
    4. 加号星号问号
(1)加号 匹配前面的子表达式一次或者多次
    例子:[email protected]
    解答:[\w.]+@[\w.]+\w    二级域名邮箱   匹配区域
(2)*号  前面不管有还是没有 都可以查  查询0个开始 匹配前面的子表达式0次或者多次
    *号表示或者    +号是必须有这个  
    例子:[email protected]
    解答:[\w-]*@
(3)问号 ?   匹配前面的子表达式0次或者一次
    例子:277100
    解答:277[\w]?00
  5. 重复匹配
    { }
(1)例子:#fff123
         解答:#[0-9A-Za-z]{3,6}
(2)例子:$102.8
         解答:\$[0-9]{3}\.
(3)例子:<b>nihao</b>123<b>design</b>    
        贪婪型查询     <[Bb]>.+</[Bb]>
        都查询出来    <[Bb]>.+?</[Bb]>
  6.边界
定位符 :\b   匹配一个字边界,即字与空格间的位置
              \B   非字与空格间匹配 
              ^    文件的头
               $     结束
(1)例子:cat
         解答:\bcat\b
(2)例子:acata
         解答:cat[\B\b]*
 (3)例子:段落的边界<!doctype html>
         解答:^\s*<!doctype.*>      \s不区分空格   ^以什么开头 .一个字符
 (4)例子:匹配所有单词
          解答:\b[a-z]+\b
7.子表达式
| 或者
(1)查询ip 172.16.218.70    (\d{1,3}\.){3}(\d{1,3})    
(2)查询日期     1991-10-10 2017-06-07
         (19|20).{2}-.{2}-.{2}  
(3)任何一个1位或者2位的数字 1-99                                        (\d{1,2})
        任何一个以1开头的3位数字 100-199                                  ([1]\d{2})
        任何一个以2开头的第二位0-4之前的三位数   2【0-4】         ([2][0-4]\d{1})
        任何一个以25开头的第三位是0-5之间的三位数 25【0-5】    (25[0-5])
8.正向预查
(1)例子:  <h1>this is 1</h1>
                    <h2>this is 2 </h2>
                    <H3>this is 3 </H3>
                    <h4>this<h1>123456</h1></h4>    
        解答:   
                    贪婪型:<[hH][1-6]>.*</[hH][1-6]>
                    懒惰型:<[hH][1-6]>.*?</[hH][1-6]>
  (2)例子: http://www.baidu.com                   
                      https://www.baidu.com 
                      ftp://www.baidu.com
           解答:.+\:                                     有冒号
                     .+(?=:)   截止到那里不查      无冒号   向后省略
            JavaScript 是没有 向前省略的
  (3)例子:hello  helly  hellz helli 
           解答:hell[?:o|y]    hell[oy]
9.判断在字符中查找特定文本是否存在
JavaScript 正则 是否符合正则的匹配
var txt      = 'hello1234567890 bye bye';
var regex  = new RegExp('456');
var output= regex.test(txt); 
console.log(output);   ture;

var txt      = 'hello1234567890 bye bye';
var regex  = new RegExp(/\d/);  判断是否有数字   如果是字符 就直接写字符就行
var output= regex.test(txt);     
console.log(output);   ture;
10.表单中的正则
<form action="">
     <p>
        只允许输入数字
        <input type="text" onkeyup="this.value = this.value.replace(/\D/g,'')">    
     </p>
</form>    

<form action="">
     <p>
        大写的A-Z a-z不能输入
        <input type="text" onkeyup="this.value = this.value.replace(/[A-Za-z]/g,'')">    
     </p>
     <p>
        只能输入英文
        <input type="text" onkeyup="this.value = this.value.replace(/[^A-Za-z]/g,'')">    
     </p>
      <p>
        只能输入汉字
        <input type="text" onkeyup="this.value = this.value.replace(/[^\u4e00-\u9fa5]/g,'')">    
     </p>  
</form> 
onkeyup 最好用在提交上面
11.replace&match
var txt      = 'hello1234567890 bye bye';
console.log(txt.replace('hello','hi'))   //只替换一个

正则:
var txt      = 'hello123456789hello0 bye bye';
zz             = /hello/g
console.log(txt.replace(zz,'hi'))   

//replace 
//search
//split
//match

var txt      = 'hello123456789hello0 bye bye';
zz             = /\d/g
console.log(txt.match(zz,'hi'))   
//match 按照数组 把符合匹配的匹配出来
12.正则的循环查找
// g 执行全局匹配
// i  大小写不敏感
// m 执行多行匹配
 
var txt      = 'hello 123456789 hello  byebye';
var regex  = new RegExp('hello','g');     // 如果加上i  就不区分大小写

while ( (output = regex.exec(txt))  != null) {   
    console.log(regex.lastIndex)
    console.log(output);   
}




你可能感兴趣的:(前端,正则)