正则表达式

Posted on Posted in js
Tips: 本文创建于2014年5月23日,已超过 2 年,内容或图片可能已经失效!

正则表达式

匹配文本内容的代码规则
正则的使用
1、制作正则表达式
2、制作目标信息,让目标信息让正则进行匹配,筛选需要的内容
3、通过match函数可以使得信息与正则进行匹配

正则表达式的组成
1、普通字符的正则 /字符串内容/

  1. <script type="text/javascript">  
  2. //正则  
  3. var pat = /05/; //通过普通字符组成正则  
  4. var str = '2014-05-23';  
  5. // 目标字符串.match  
  6. var rst = str.match(pat);  
  7. console.log(rst);  
  8. </script>  

2、定义字符集

  1. <script type="text/javascript">  
  2.   
  3. var pat = /[a-f]/;  
  4. var str = 'this is good';  
  5.   
  6. var pat = /[a-g]/;  
  7. var str = 'ok,today is good'; // 输出第一个d  
  8.   
  9. // var pat = /[h-d]/; // 顺序反了会出现错误  
  10. // var str = 'hobby';   
  11.   
  12. var pat = /[5-9]/;  
  13. var str = '2014-05';   
  14.   
  15. var pat = /[rwxap]/;  
  16. var str = 'world';  
  17.   
  18. var pat = /[^yvdq]/; // 非匹配,只要不是括号中的内容即可  
  19. var str = '#!ac2334';  
  20.   
  21. var pat = /[a-zA-Z0-9]/;  
  22. var str = '2014HELLO';  
  23.   
  24. var rst = str.match(pat);  
  25. console.log(rst);  
  26. </script>  

特别字符

  1. <script type="text/javascript">  
  2. // +匹配前面最少一次  
  3. var pat = /[a-z]+/;  
  4. var str = 'hello';  
  5.   
  6. var pat = /go+gle/;  
  7. var str = 'goooogle';  
  8.   
  9. var pat = /[0-9]+/;  
  10. var str = '2014-05-23';  
  11. // * 匹配单元最少0次,最多不限制  
  12. var pat = /go*gle/;  
  13. var str = 'ggle';  
  14. // ? 0或者1  
  15. var pat = /go?gle/;  
  16. var str = 'g0gle';  
  17.   
  18. var rst = str.match(pat);  
  19. console.log(rst);  
  20. </script>  

^ $

  1. <script type="text/javascript">  
  2. // ^匹配内容开始位置  
  3. // $匹配目标内容结束位置  
  4. var pat =/apple$/;  
  5. var str = 'I like eat apple';  
  6.   
  7. var pat = /^[0-9]/;  
  8. var str = '4hello 201';  
  9.   
  10. var pat = /^[0-9]+$/;  
  11. var str = '13234517659'  
  12.   
  13. var rst = str.match(pat);  
  14. console.log(rst);  
  15. </script>  

. / |

  1. <script type="text/javascript">  
  2. // . / |  
  3.   
  4. // | 或  
  5. var pat = /a|b/;  
  6. var str ='a sd'  
  7.   
  8. // \ 转移  
  9. var pat = /\*/;  
  10. var str = '****';  
  11.   
  12. // . 匹配任何一个单字符 ,换行符号\n不给匹配  
  13. var pat = /.*/;  
  14. var str = 'adfads\nfasdf';  
  15.   
  16. var rst = str.match(pat);  
  17. console.log(rst);  
  18. </script>  

()

  1. <script type="text/javascript">  
  2. // () 提高表达式的优先级  
  3. var pat = /(go)+gle/;  
  4. var str = 'gogogogogogogogogle';  
  5.   
  6. // 可以大的内容里面筛选出小的内容  
  7. var pat = /[0-9]+-(([0-9]+)-([0-9]))/;  
  8. var str = '2014-05-23';  
  9.   
  10. // var pat = /<div>(.*)<\/div>/;  
  11. // var str = "<div>天气内容</div>"  
  12.   
  13. var rst = str.match(pat);  
  14. console.log(rst);  
  15. </script>  

模式修饰符

  1. <script type="text/javascript">  
  2. // 大小写不敏感  
  3. var pat = /[a-z]+/i;  
  4. var str = 'hellDFO';  
  5. // g 全局匹配  
  6. var pat = /[0-9]+/g;  
  7. var str = '2014-05-23';  
  8. // 模式单元也需要是用下标 1, 2  
  9. // 当前情况全局匹配把1,2占用  
  10. var pat = /[0-9]+-([0-9]+)-[0-9]+/g;  
  11. var str = '2014-05-25 2014-05-22 2014-05-21';  
  12.   
  13. // m 把内容视为多行  
  14. var pat =/apple$/m;  
  15. var pat = /^you/m;  
  16. var str = 'I like apple\nyou like pear';  
  17.   
  18. //模式修正符允许使用多个  
  19. var pat = /[a-z]+/ig;  
  20. var str = 'this is bOOk that is computer';  
  21.   
  22. var rst = str.match(pat);  
  23. console.log(rst);  
  24. </script>  

模式单元重复匹配

  1. <script type="text/javascript">  
  2. // 模式单元重复匹配  
  3. // var pat = /[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+/;  
  4. var pat = /[0-9]+-([0-9]+)-\1 \1:\1:\1/; // 通过 \1或\2替换参数重复匹配第一个单元  
  5. var str = '2014-05-05 05:05:05';  
  6.   
  7. var rst = str.match(pat);  
  8. console.log(rst);  
  9. </script>  
  1. <script type="text/javascript">  
  2. var pat = /\d+/;  
  3. var str = '1234125abc';  
  4.   
  5. var pat = /\w+/;  
  6. var str = 'apple_234@23.com';  
  7.   
  8. var pat = /\bis\b/; // 匹配单词边界(空格、逗号、句号、问好)  
  9. var str = 'this is a book';  
  10. var newstr = str.replace(pat,'was');  
  11. console.log(newstr);  
  12.   
  13. //匹配单词内部 \B  
  14. var pat = /\Bis\b/;  
  15. var str = 'is this a book';  
  16. var newstr = str.replace(pat,'at');  
  17. console.log(newstr);  
  18. //var rst = str.match(pat);  
  19. //console.log(rst);  
  20. </script>  

限定字符
- {m} : 其前一单元严格出现m次
- {m,} : 其前一单元出现至少m次
- {m,n} : 其前一单元出现至少m,至多n次
- [kdsimd]:表示中括号中的任意一个字符
- [a-f]: 表示中括号中中杠的两端字符范围
- [^lsjd]:不是中括号中的任意一个字符
- [^a-f]: 不是中括号中中杠的两端字符范围

  1. <script type="text/javascript">  
  2. // 限定字符  
  3. var pat = /go{4}gle/;  
  4. var str = "goooogle";  
  5.   
  6. var pat = /[yoahgndle]+/;  
  7. var str = 'yahooandgoogle';  
  8.   
  9. var pat = /[yoahgndle]{6}/; //yahooa  
  10. var str = 'yahooandgoogle';  
  11.   
  12. var pat = /\w{4,9}/; // hello_wor  
  13. var str = 'hello_world-beijing';  
  14.   
  15. var pat = /([a-z]+-){3}/;  
  16. var str = "tom-jack-mary-";  
  17.   
  18. var res = str.match(pat);  
  19. console.log(res);  
  20. </script>  

正向预查、反向预查

  1. <script type="text/javascript">  
  2. // 正向预查  
  3. //等号左边的英文字母  
  4. // (?=模式) 与匹配的一致  
  5. // 正向预查:指定内容右边出现具体信息条件,就把内容匹配出来  
  6. var pat = /hello(?=(\d)+)/;  
  7. var str = 'hello123';  
  8.   
  9. // (?!模式) 与匹配的不一致  
  10. var pat = /hello(?!345)/;  
  11. var str = 'hello344';  
  12.   
  13. var str = "http://web.0320.com/js/04.php?name=tom&age=23&addr=zhonguancun";  
  14. var pat = /[a-z]+(?==)/g; //后边的=是辅助条件不会成为结果一部分  
  15.   
  16. var rst = str.match(pat);  
  17. console.log(rst);  
  18. </script>  

反向预查:与正向预查的区别是,辅助条件写到匹配内容的前边

  1. <?php  
  2.   
  3. //反向预查  
  4. /** 
  5. 反向匹配 
  6. $str = "!!!tom123tom"; 
  7. //查询tom信息,条件是tom前边出现数字信息 
  8. $pat = "/(?<=(\d)+)tom/"; //tom(后边的) 
  9.  
  10. 反向不匹配 
  11. $str = "2008shanghai----hongkong"; 
  12. //查询字母字符串信息,条件是前边不能出现数字 
  13. $pat = "/(?<!(\d)+)[a-z]+/"; //hongkong 
  14. */  
  15. $str = "!!!jack123tom";  
  16. $pat = "/(?<=(\d)+)[a-z]+/";  
  17. //preg_match(模式,字符串,匹配到的内容);  
  18. preg_match($pat$str$rst);   
  19. print_r($rst); //tom  
  20.   
  21. $str = "2008shanghai----shanghai";  
  22. $pat = "/(?<!(\d)+)shanghai/";  
  23. $newstr = preg_replace($pat,'beijing',$str);  
  24. echo $newstr//2008shanghai----shanghai  
  25. //preg_match($pat,$str,$rst);  
  26. //print_r($rst); //shanghai(后边的)  
  27.   
  28.   
  29.   
  30. $str = "http://web.0320.com/js/04.php?name=tom&age=23&addr=zhongguancun";  
  31. $pat = "/(?<==)\w+/";  
  32. //preg_match($pat,$str,$rst); //单次匹配  
  33. preg_match_all($pat,$str,$rst); //全局匹配  
  34. print_r($rst);//Array ( [0] => Array ( [0] => tom [1] => 23 [2] => zhongguancun ) )   

案例:手机

  1. <script type="text/javascript">  
  2.   
  3. //手机号码  
  4. /* 
  5. 条件: 
  6. ① 11位 
  7. ② 全部数字 
  8. ③ 13(0-9)或15(01256) 
  9. */  
  10. var pat = /^(13\d|15[01256])\d{8}$/;  
  11. var str = "13765431230"//ok  
  12. var str = "15723451679"//nook 号段没有157  
  13. var str = "1568769543a"//nook 全部内容必须数字  
  14.   
  15. var rst = str.match(pat);  
  16. console.log(rst);  
  17.   
  18. </script>  

案例:邮箱

  1. <script type="text/javascript">  
  2.   
  3. //匹配邮箱  
  4. /* 
  5. 29873982@qq.com 
  6. apple@so-hu.com 
  7. pear_999@163.com 
  8.  
  9. 条件: 
  10. ① @符号 
  11. ② 邮箱名称可以为:数字、字母、下划线、中恒线 
  12. ③ @符号后边内容:字母、数字、中横线 
  13. ④ 域名后缀:.com .gov .org .net .com.cn .cn 
  14. */  
  15. var pat = /^[a-zA-Z0-9-_]{5,}@[a-zA-Z0-9-]+(\.[a-z]+)+$/;  
  16. var str = "29873982@qq.com";  
  17. var str = "apple@so-hu.com";  
  18.   
  19. var rst = str.match(pat);  
  20. console.log(rst);  
  21.   
  22. </script>  

案例三:IP

  1. <script type="text/javascript">  
  2.   
  3. //ip地址匹配  
  4. /** 
  5. 192.168.3.125 
  6.  
  7. 第一位数字:1-223 
  8. 1-9 ----> [1-9] 
  9. 10-99 ----> [1-9]\d 
  10. 100-199 ----> 1\d\d 
  11. 200-219 ----> 2[01]\d 
  12. 220-223 ----> 22[0-3] 
  13. var pat = /^([1-9]|[1-9]\d|1\d\d|2[01]\d|22[0-3])$/; 
  14. 第二、三、四位数字:0-255 
  15. 0-9 ----> \d 
  16. 10-99 ----> [1-9]\d 
  17. 100-199 ----> 1\d\d 
  18. 200-249 ----> 2[0-4]\d 
  19. 250-255 ----> 25[0-5] 
  20.  
  21. //200-255 ----> 2[0-5]\d 
  22.  
  23. var pat = /^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/; 
  24. */  
  25. var ippat = /^([1-9]|[1-9]\d|1\d\d|2[01]\d|22[0-3])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])){3}$/;  
  26.   
  27. var str = "203.152.4.99"//ok  
  28. var str = "203.152.4.261"//nook  
  29.   
  30. var rst = str.match(ippat);  
  31. console.log(rst);  
  32. </script>  
» 转载请注明来源:若我若鱼 » 正则表达式

Leave a Reply

Your email address will not be published. Required fields are marked *

3 × 2 =