基础练习: 

  1. //连续3个数字
  2. var pattern1 = /\d{3}/g;
  3. console.log(pattern1.test('s23')); // false
  4. console.log(pattern1.test('s112s')); // true
  5.  
  6. //连续2个相同的 数字
  7. var pattern1 = /(\d)\1/g;
  8. console.log(pattern1.test('s23')); // false
  9. console.log(pattern1.test('s223s')); // true
  10.  
  11. //连续3个相同的数字
  12. var pattern1 = /(\d)\1{2}/g;
  13. console.log(pattern1.test('s23')); // false
  14. console.log(pattern1.test('s222s')); // true
  15.  
  16. //连续3个或3个以上 相同的 字符
  17. var pattern1 = /(\w)\1{2,}/g;
  18. console.log(pattern1.test('s23')); // false
  19. console.log(pattern1.test('saaaa2s')); // true
  20.  
  21. //正整数
  22. [1-9]\d*
  23.  
  24. //负整数
  25. -[1-9]\d*
  26.  
  27. //整数
  28. (-?[1-9]\d*)|0
  29.  
  30. //正浮点数
  31. \d+.\d+
  32.  
  33. //负浮点数
  34. -\d+.\d+
  35.  
  36. //浮点数
  37. -?\d+.\d+
  38.  
  39. //中文字符
  40. [\u4e00-\u9fa5]
  41.  
  42. //双字节中文字符
  43. [^\x00-\xff]
  44.  
  45. //空格
  46. \s
  47.  
  48. //换行
  49. \n

^ 和 $ 使用:

  1. //假如我把 正浮点数 的正则写成这样 :(0.\d+)|(\d+.\d+) ,现在开始匹配
  2.  
  3. //匹配一个字符串中的 正浮点数
  4. var pattern = /(0.\d+)|(\d+.\d+)/;
  5. console.log(pattern.test('0')); // false
  6. console.log(pattern.test('0.5')); // true
  7. console.log(pattern.test('a0.5')); // true
  8. console.log(pattern.test('a0.5s')); // true
  9. console.log(pattern.test('a0.a5s')); // false
  10.  
  11. //匹配以 `正浮点数` 开头或结尾 的字符串
  12. var pattern = /^(0.\d+)|(\d+.\d+)$/;
  13. console.log(pattern.test('0.5')); // true
  14. console.log(pattern.test('a0.5')); // true
  15. console.log(pattern.test('a0.5s')); // false
  16. console.log(pattern.test('a0.a5s')); // false
  17.  
  18. //只匹配 正浮点数
  19. var pattern = /^(0.\d+)$|^(\d+.\d+)$/;
  20. //或 /^((0.\d+)|(\d+.\d+))$/
  21. console.log(pattern.test('0.5')); // true
  22. console.log(pattern.test('a0.5')); // false
  23. console.log(pattern.test('a0.5s')); // false
  24. console.log(pattern.test('a0.a5s')); // false

格式日期:

  1. //只匹配 日期格式:年-月-日
  2. var pattern7 = /^\d{4}-(1[0-2]|0?[1-9])-(0?[1-9]|[12]\d|3[01])$/;
  3. console.log(pattern7.test('ad2016-08-20ad')); // false
  4. console.log(pattern7.test('2016-08-20')); // true
  5. console.log(pattern7.test('2016-8-20')); // true
  6. console.log(pattern7.test('16-08-20')); // false
  7. console.log(pattern7.test('2016/08/20')); // false
  8. //若去掉^和$
  9. var pattern7 = /\d{4}-(1[0-2]|0?[1-9])-(0?[1-9]|[12]\d|3[01])/;
  10. console.log(pattern7.test('ad2016-08-20ad')); // true
  11.  
  12. //只匹配 日期格式:年-月-日 或 年.月.日 或 年/月/日
  13. var pattern7 = /^\d{4}(\/|\-|.)(0?[1-9]|1[0-2])\1(0?[1-9]|[12]\d|3[0-1])$/
  14. console.log(pattern7.test('ad2016-08-20ad')); // false
  15. console.log(pattern7.test('2016-08-20')); // true
  16. console.log(pattern7.test('2016/08/20')); // true
  17. console.log(pattern7.test('2016.8.20')); // true
  18. console.log(pattern7.test('2016-08-9')); // true
  19. console.log(pattern7.test('2016/18/20')); // false

时间:

  1. //只匹配 时间格式:小时:分钟, 24小时制
  2. var pattern8 = /^((0?|1)\d|2[0-3]):([0-5]\d)$/;
  3. console.log(pattern8.test('13:45')); // true
  4. console.log(pattern8.test('3:45')); // true
  5. console.log(pattern8.test('13点45')); // false

身份证号码:

  1. //只匹配 中国大陆身份证号,15位或18位
  2. var pattern9 = /^\d{15}|\d{17}[\d|X]$/;
  3. //或 /^\d{15}(\d{2}[0-9X])?$/
  4. console.log(pattern9.test('15020416803082111X')); //true
  5. console.log(pattern9.test('422322199901090033')); // true
  6. console.log(pattern9.test('asdfasdfasfasdf123')); // false

其它:

  1. //只匹配 用户名
  2. ^[A-Za-z0-9_\/-\u4e00-\u9fa5]+$
  3.  
  4. //只匹配 长度为8-10的用户密码(以字母开头、数字、下划线)
  5. ^[A-z\_]\w{7,9}$
  6.  
  7. //只匹配 QQ号
  8. ^[1-9](\d{5,11})$
  9.  
  10. //只匹配 手机(国内)
  11. ^0?(13|14|15|17|18|19)[0-9]{9}$

面试练习题:

1、匹配字符串中所有的HTML(1)标签头部 或 尾部 (2)标签头部(3)完整标签

  1. var str = 'ada<option value="hh">0</option>54<div id="as">adda</div>ad'
  2. var result = str.match(/<.*>/g);
  3. console.log(result); //["<option value="hh">0</option>54<div id="as">adda</div>"]
  4.  
  5. //(1)匹配 标签头部 或 尾部
  6. var result = str.match(/<.*?>/g);
  7. console.log(result); //["<option value="hh">", "</option>", "<div id="as">", "</div>"]
  8.  
  9. //(2)匹配 标签头部
  10. var result2 = str.match(/<[A-z].*?>/g);
  11. console.log(result2);// ["<option value="hh">", "<div id="as">"]
  12.  
  13. //(3)匹配 完整标签
  14. var result3 = str.match(/<[A-z].*?>.*?<\/.*?>/g);
  15. console.log(result3);// ["<option value="hh">0</option>", "<div id="as">adda</div>"]

2、写出正则表达式, 从一个字符串中提取所有链接地址。 比如下面字符串中

  1. var str = 'IT面试题博客中包含很多<a href="http://hi.baidu.com/mianshiti/blog/category/微软面试题">微软面试题</a>';
  2. var exg = /<a(?: [^>]*)+href="(.*)"(?: [^>]*)*>/g;
  3. console.log(exg.exec(str)[1]);
  4. //http://hi.baidu.com/mianshiti/blog/category/微软面试题

3、如何获取一个字符串中的数字字符,并按数组形式输出,如:‘dgfhfgh254bhku289fgdhdy675gfh’ ,输出[254,289,675]

  1. var str = 'dgfhfgh254bhku289fgdhdy675gfh';
  2. console.log(str.match(/\d+/g)); //["254", "289", "675"]

4、敏感词过滤

  1. var str = '我草你妈哈哈背景天胡集涛哪肉涯剪短发欲望';
  2. var result = str.replace(/草|肉|欲|胡|急|涛/g,'*');
  3. console.log(result); //我*你妈哈哈背*天***哪*涯剪短发*望

5、给的字符串str,检查其是否符合美元书写格式

  1、以$开头

  2、整数部分从个位起,满三个数用“,”分隔

  3、如果是小数,则小数部分长度为2

  4、正确的格式如:$1,023,032.03或$2.03,错误格式:$3,432,12.12或者$34,344.3

  1. var pattern7 = /^\$\d{1,3}(,\d{3})*(\.\d{2})$/;
  2. console.log(pattern7.test('$1,023,032.03')); // true
  3. console.log(pattern7.test('$2.03')); // true
  4. console.log(pattern7.test('$3,432,12.12')); // false
  5. console.log(pattern7.test('$34,344.3')); // false
  6. console.log(pattern7.test('da$2.03')); // false

6、给定字符串 str,检查其是否以元音字母结尾。

  元音字母包括 a,e,i,o,u,以及对应的大写;若包含则返回 true,否则返回 false

  1. function endsWithVowel(str) {
  2. return (/[a,e,i,o,u]$/i).test(str);
  3. }
  4. console.log(endsWithVowel('gorilla')); //true
  5. console.log(endsWithVowel('gorillE')); //true
  6. console.log(endsWithVowel('gorillx')); //false

7、驼峰式字符串borderLeftColor和 连字符式字符串border-left-color相互转换

  1. var str = 'borderLeftColor';
  2. var str2 = 'border-left-color';
  3.  
  4. ///把str换成 连字符式
  5. console.log(str.replace(/[A-Z]/g, (item) => '-' + item.toLowerCase())); //border-left-color
  6. //把str换成 驼峰式
  7. console.log(str2.replace(/-([a-z])/g, (item, $1) => $1.toUpperCase())); //borderLeftColor

8、对人口数字的格式化处理,三位数字用一个’,’(逗号)隔开

  1. function numberWithCommas(x) {
  2. //对右侧人口数字的格式化处理,三位数字用一个','(逗号)隔开
  3. return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  4. }
  5. console.log(numberWithCommas(12345678))//12,345,678

9、去掉http协议的jpg文件的协议头

  1. var imgs = [
  2. 'http://img.host.com/images/fds.jpg',
  3. 'https://img.host.com/images/fjlj.jpg',
  4. 'http://img.host.com/images/djalsdf.png',
  5. 'https://img.host.com/images/adsjfl.png',
  6. 'http://img.host.com/image/jasdlf.jpg'
  7. ];
  8. var result = imgs.map((img)=>{
  9. return img.replace(/http:(\/\/.+\.jpg)/,(item,$1) => {
  10. return $1
  11. });
  12. });
  13. console.log(result);
  14.  
  15. // ["//img.host.com/images/fds.jpg",
  16. // "https://img.host.com/images/fjlj.jpg",
  17. // "http://img.host.com/images/djalsdf.png",
  18. // "https://img.host.com/images/adsjfl.png",
  19. // "//img.host.com/image/jasdlf.jpg"]

10、找出数组中的表示日期的时间字符串,并修改格式为‘月-日-年’

  1. var times= ['2006/02/03',
  2. 'test/07/sd',
  3. '2016/05/10',
  4. '1998-03-07',
  5. '12345/23/45678',
  6. '1234/23/56789',
  7. '12345/23/45']
  8. var result = times.map((time)=>{
  9. return time.replace(/^(\d{4})[/-](\d{2})[/-](\d{2})$/,(match,$1,$2,$3)=>{
  10. return $1-$2-$3;
  11. });
  12. });
  13. console.log(result);
  14.  
  15. //[ '02-03-2006',
  16. // 'test/07/sd',
  17. // '05-10-2016',
  18. // '03-07-1998',
  19. // '12345/23/45678',
  20. // '1234/23/56789',
  21. // '12345/23/45' ]

11、获取 url 中的参数

  1. // 获取 url 参数
  2. function getUrlParam(sUrl, sKey) {
  3. var arr={};
  4. sUrl.replace(/\??(\w+)=(\w+)&?/g,function(match,p1,p2){
  5. //console.log(match,p1,p2);
  6. if(!arr[p1]){
  7. arr[p1]=p2;
  8. }
  9. else {
  10. var p=arr[p1];
  11. arr[p1]=[].concat(p,p2);
  12. }
  13. })
  14. if(!sKey)return arr;
  15. else{
  16. for(var ele in arr){
  17. if(ele==sKey){return arr[ele];}
  18. }
  19. return "";
  20. }
  21. }

12、让字符串制定部分变色

  1. <div id="as" >我爱你哈哈爱你</div>
  2.  
  3. var oDiv = document.getElementById('as');
  4. var str = oDiv.innerHTML;
  5. var newStr = str.replace(/爱/g, m => "<span style='color:red'>" + m + "</span>");
  6. oDiv.innerHTML = newStr;

显示:我爱你哈哈爱你

转载:https://blog.csdn.net/b954960630/article/details/8263400

JS正则练习集的更多相关文章

  1. js 正则之检测素数

    原文:js 正则之检测素数 相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题.原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的, ...

  2. js 正则之 判断密码类型

    原文:js 正则之 判断密码类型 今天没啥写的,就分享个思路吧.之前在群里讨论的时候,谢亮兄弟说判断密码是否是纯数字,纯字母之类的.如果用 , 条判断,那就老长一大段了.这个思路是我之前看 jQuer ...

  3. Js正则Replace方法

    JS正则的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\s+)|(\s+$)" ...

  4. js正则

    JS正则 test:判断字符串是否符合规定的正则 rep = /\d+/; rep.test("asdfoiklfasdf89asdfasdf") # true rep = /^\ ...

  5. js正则匹配的一个日常应用

    应用实例 1 /** 将段落中的 \n 转换为 <p></p>, 规范存储 */ 2 function formatParagraphForStore(val) { 3 var ...

  6. jS正则和WEB框架Django的入门

    JS正则 -test 判断字符串是否符合规定的正则表达式 -exec 获取匹配的数据 test的例子: 从上述的例子我们可以看出,如果rep.test匹配到了就返回true,否则返回false exe ...

  7. js正则实现二代身份证号码验证详解

    js正则实现二代身份证号码验证详解 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至 ...

  8. js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“

    js  正则  以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“ var reg = /^[a-zA-Z]{1}(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d_@ ...

  9. 手机号码js正则验证

    手机号码js正则验证 var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/; if (!myreg.test($(" ...

随机推荐

  1. javascript中字符串的方法

    字符串的方法 charAt();返回字符串指定索引的字符: concat();连接两个或多个字符串: indexOf();返回字符串中检索指定字符第一次出现的位置: lastIndexOf();返回字 ...

  2. golang 如何将imagemagick 和golang 打包到docker 环境中

    公司最近开发了个项目,用到了imagemagick 和golang 环境,在我本地机上开发妥妥的,结果准备部署到线上环境的时候,出现了大坑,尝试了无数次后,最后还是解决了,官方说有问题也不说清楚点,一 ...

  3. matplotlib等高线图-【老鱼学matplotlib】

    等高线图是在地理课中讲述山峰山谷时绘制的图形,在机器学习中也会被用在绘制梯度下降算法的图形中. 因为等高线的图有三个信息:x, y以及x,y所对应的高度值. 这个高度值的计算我们用一个函数来表述: # ...

  4. Linux系统下安装JDK

    注意:linux系统下使用mount命令挂载Windows系统下的共享文件,详情见我的另一篇“Linux系统挂载Windows系统下的共享文件” 一.安装jdk 1.进入usr目录cd /usr 2. ...

  5. P4147 玉蟾宫 二维DP 悬线法

    题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...

  6. Grodno 2015 (Urozero May 2015 Day 5)

    A. Palindromes 留坑. B. Modules 将$a$排序,那么最优解中$a_n$一定放在前后一个,且前面$n-1$个每次要么放最小的,要么放最大的,区间DP即可. #include&l ...

  7. Sting、StringBuffer、StringBuilder

    (1)String是字符串常量,一旦创建之后不可更改:StringBuffer和StringBuilder是字符串变量,可以更改.String的不可变,所以适合作为Map的键. (2)StringBu ...

  8. centos7中安装pg数据库

    # centos中安装的命令 # yum install postgresql-server.x86_64 # 安装之前可以通过以下命令价差是否已经安装过 rpm -qa | grep postgre ...

  9. Java之为何配置环境变量

    一.不要问一个程序员为什么命名是基础零(^_^) 二.Java为什么跨平台: 因为有java虚拟机,一个程序的运行必然要依赖于系统,java的跨平台是因为java虚拟机jvm把不同平台编写的代码编译成 ...

  10. js递归遍历多维数组并在修改数组的key后返回新的多维数组

    我司最近正在用VUE做一个基于用户权限显示不同左侧菜单的后台管理系统,接口会根据用户的权限不同返回不同的菜单名称.URL等,前端要将这些菜单名称及URL动态添加到系统的左侧,这里就用到了vue-rou ...