正则表达式的使用

167 阅读3分钟

正则

正则表达式的使用

创建正则表达式有两种方式 :

1, 使用new
var box = new RegExp("box"); //传入非空字符串 
console.log(box);   // /box/
console.log(typeof box); //object

var box = new RegExp("box", "gi");  //第二个参数是模式修饰符
console.log(box); // /box/gi

2, 采用字面量方式
var box = /box/;
console.log(box);   // /box/
console.log(typeof box); //object

var box = /box/gi;
console.log(box); // /box/gi

注意: 其中g表示全局匹配,  i表示忽略大小写

使用正则表达式匹配字符串有两种方式:

 1, test() : 返回true则符合, false则不符合
 2, exec() : 返回数组则符合, null则不符合
这两种方法使用正则表达式对象去调用, 参数为要匹配的字符串

var box = /box/gi;
var str = "This is a Box bOX box";
console.log(box.test(str));
console.log(/box/gi.test(str));

var box = /box/gi;
var str = "This is a Box boX"
console.log(box.exec(str));
console.log(/box/gi.exec(str));

字符串的正则表达式方法

除了 test()和 exec()方法,String 对象也提供了 4 个使用正则表达式的方法。
var str = "This is a Box box BoX";
var matchArr = str.match(/box/gi);
console.log(matchArr); //返回数组或null

//查找并替换, 返回替换后的新字符串
var replaceStr = str.replace(/box/gi, "xxx");
console.log(replaceStr);

//查找并返回匹配的字符串的起始位置,找不到匹配的则返回-1
var searchIndex = str.search(/box/i);
console.log(searchIndex);
		
//根据指定字符串拆分, 返回拆分后的数组, 否则返回原字符串
var splitArr = str.split(/b/i);
console.log(splitArr.length);

元字符

  1 .任意字符,一个点.表示一个字符
  var reg = /g..gle/;
  var str = 'gadgle';
  console.log(reg.test(str));
  2. * 次数,0或者多次
  3. .* 任意字符可以出现任意次数
  var reg = /g.*gle/
  var str = "gfqjwefjwjf233%^&*hjgle";
  console.log(reg.test(str));

  4. [ ] : 表示字符可以出现的范围,一个中括号是一个字符
  var reg = /g[a-z]gle/;
  var str = "gagle"
  console.log(reg.test(str));

  5.[abc] a或者b 或者c
  var reg = /g[abc]gle/;
  var str = 'gbgle';
  console.log(reg.test(str));

  6.[^a-z] 在括号内部出现^取反,不是a-z 
  var reg = /g[^a-z]gle/;
  console.log(reg.test("g gle"));

  7. [a-z]*
  var reg = /g[a-z]*gle/
  var str = "google";
  console.log(reg.test(str));

  8. + 至少1次
  var reg = /g[a-z]+gle/
  console.log(reg.test("gooooogle"));

  9. ?  0次或者1次
  var reg = /g[a-z]?gle/
  console.log(reg.test("gogle"));
  console.log(reg.test("ggle"));

  1.0 \w  [a-zA-Z0-9_] 
  // \w* 
  // \w+ 
  // \w?
  var reg = /g\w+gle/
  console.log(reg.test("goagle"));

  11. \W [^a-zA-Z0-9_]
  var reg = /g\W+gle/
  console.log(reg.test("g!#gle"));

  12. \d [0-9]

  var reg = /g\d+gle/
  console.log(reg.test("g123gle"));

  13. \D  [^0-9]
  var reg = /g\D+gle/
  console.log(reg.test("g_!gle"));

  14. \s  空白
  var reg = /g\s+gle/
  console.log(reg.test("g gle"));

  15. \S  非空白
  var reg = /g\S+gle/
  console.log(reg.test("g123gle"));

  16. {n} 固定n次
  var reg = /g[a-z]{2}gle/
  console.log(reg.test("gaagle"));

  17. {n,m} 最少n次,最多m次
  var reg = /g[a-z]{2,5}gle/
  console.log(reg.test("gabcacgle"));

  18. {n,} 最少n次,最多不限
  var reg = /g[a-z]{2,}gle/
  console.log(reg.test("gabsadasdadsdasgle"));


  19. /^ 匹配开始,从头开始匹配
  var reg = /^google/
  console.log(reg.test("google"));

  20. $/ 匹配结尾,从结尾开始匹配
  var reg = /google$/
  console.log(reg.test("123google"));

  21.()组
  var reg = /^(google)+$/
  console.log(reg.test("googlegoogle"));


  22. 使用或模式匹配: |     ||
  // | 代表或者的意思, 匹配其中一种字符串
  var pattern = /google|baidu|bing/;  // | : 匹配三个中的其中一个字符串
  var str = "googl2e bai3du;bingl"
  console.log(pattern.test(str));

  23. 分组模式匹配: ()
  // ()加上小括号, 将内容进行分组, 可以作为一个整体进行多次匹配
  var pattern = /(google){4,8}/;   //匹配分组中的字符出现4-8次
  var str = "googlegooglegooglegoogle"
  console.log(pattern.test(str));


  24. 获取8..8之间的任意字符
  var pattern = /8(.*)8/;
  var str = "this is 8google8 baab 8ggg8";
  console.log(str.match(pattern));
  console.log(RegExp.$1); //"google8 baab 8ggg"
  console.log(RegExp.$2); //"google8 baab 8ggg"


  var reg = /^([a-z]+)\s([0-9]{4})$/i;

  var str = "abc 1122"

  console.log(reg.test(str));
  console.log(RegExp.$1);
  console.log(RegExp.$2);

  25. 以字母开头,至少一个, 忽略大小写

  var reg = /^[a-z]+/i;

  // 以字母开头, 
  // 至少有一个字母,有一个空格,
  // 和4个数字,并以数字结尾,忽略大小写

  var reg = /^[a-z]+\s\d{4}$/i
  var reg = /^[a-z]+\s[0-9]{4}$/i

  26. 捕获性分组
  var pattern = /(\d+)([a-z])/;    //一个或多个数字,和一个a-z的字母
  var str = "123abc";
  console.log(pattern.exec(str)); //"123a,123,a"

  27. 非捕获性分组   ?:
  var pattern = /(?:\d+)(?:[a-z])/;    //一个或多个数字,和一个a-z的字母
  var str = "123abc";
  console.log(pattern.exec(str)); //"123a,123,a"

  var str = ".[/b]"
  var reg = /\.\[\/b\]/;
  console.log(reg.test(str));

  28.  m 换行
  var reg = /^\d/gm
  var str = "1,baidu\n2,google\n3,bing";
  console.log(str.replace(reg, "#"));


  29.  邮政编码(共6位数字, 第一位不能为0)
  var reg = /^[1-9]\d{5}$/
  console.log(reg.test(123456));

  30.  电子邮件(xxxx@xxx(.xxx)+)
  // luozan@sina.com
  var reg = /\w+@\w+\.\w+/ig

  // luozan@sina.com
  // luo.zan@sina.com
  // luo.zan@sina.com.cn 
  // luo.zan.shuai@sina.com.cn 
  console.log("-------------");
  var reg = /\w+(\.\w+)*@\w+(\.\w+)+/i
  console.log(reg.test("luozan@sina.com"));
  console.log(reg.test("luo.zan@sina.com"));
  console.log(reg.test("luo.zan@sina.com.cn "));
  console.log(reg.test("luo.zan.shuai@sina.com.cn "));


  31. 手机号(13或14或15或18开头的11位数字)
  // 13 14 15 16 17 18 19
  // var reg=/^[1][3-9]\d{9}$/

  var reg = /^[1][3458]\d{9}$/

  32. 用户名(只能使用数字字母下划线, 
  //且数字不能开头, 长度在6-15位)


  var reg = /^[a-z_]\w{5,14}$/i

  33.  删除多余空格
  var str = "   zhang  san";
  console.log(str.replace(/\s+/g, ""));


  34. trim()
  var str = "   zhang san   ";
  var str1 = str.replace(/^\s+/, "").replace(/\s+$/, "")
  console.log(str1);

  35. 身份证  120
  var reg = /[1-9]\d{16}[\dX]/;

  36. 简单日期格式  99  31  99
  var reg = /^\d{4}-\d{2}-\d{2}$/

  37. 图片文件格式  .jpg  .png .jpeg .gif
  var reg = /\.(jpg|png|jpeg|gif)$/