目录

正则表达式概述

正则表达式的特点

正则表达式在 JavaScript 中的使用

创建正则表达式

1. 通过调用 RegExp 对象的构造函数创建

2. 通过字面量创建

测试正则表达式 test

正则表达式中的特殊字符

正则表达式的组成

边界符

字符类

1. []  方括号

2. [-]  方括号内部 范围符-

3. [^]  方括号内部 取反符^

4. 字符组合

量词符

案例:用户名验证

括号总结

预定义类

案例:表单验证

正则表达式中的替换

replace 替换

正则表达式参数

案例:敏感词过滤


正则表达式概述

正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象

  • 正则表通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)
  • 正则表达式还常用于过滤掉页面内容中的一些敏感词(替换)
  • 或从字符串中获取我们想要的特定部分(提取)等 。

正则表达式的特点

1. 灵活性、逻辑性和功能性非常的强。

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。比如: ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

4. 实际开发,一般都是直接复制写好的正则表达式. 但是要求会使用正则表达式并且根据实际情况修改正则表达式. 比如用户名: /^[a-z0-9_-]{3,16}$/

正则表达式在 JavaScript 中的使用

创建正则表达式

1. 通过调用 RegExp 对象的构造函数创建

   var 变量名 = new RegExp(/表达式/);

        // 1. 利用RegExp对象来创建 正则表达式  regular expressionvar regexp = new RegExp(/123/);console.log(regexp);

2. 通过字面量创建

   var 变量名 = /表达式/;

        // 2. 利用字面量创建 正则表达式var rg = /123/;

                // 注释中间放表达式就是正则字面量

测试正则表达式 test

  • test() 正则对象方法,用于检测字符串是否符合该规则,该对象会返回 true 或 false,其参数是测试字符串。

   regexObj.test(str)

  • regexObj 是写的正则表达式
  • str 我们要测试的文本
  • 就是检测str文本是否符合我们写的正则表达式规范.
        var rg = /123/;// 3. test 方法用来检测字符串是否符合正则表达式要求的规范console.log(rg.test('abc')); // false

正则表达式中的特殊字符

正则表达式的组成

  • 一个正则表达式可以由简单的字符构成,比如 /abc/,也可以是简单和特殊字符的组合,比如 /ab*c/ 。
  • 其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如 ^ 、$ 、+ 等。

特殊字符非常多,可以参考:

  • MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
  • jQuery 手册:正则表达式部分
  • 正则测试工具: http://tool.oschina.net/regex

边界符

正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符。

如果 ^ 和 $ 在一起,表示必须是精确匹配。

        // 边界符 ^ $var rg = /abc/;  // 正则表达式里面不需要加引号,不管是数字型还是字符串型//   /abc/ 只要包含abc这个字符串,返回的都是trueconsole.log(rg.test('abc'));  // trueconsole.log(rg.test('abcd')); // trueconsole.log(rg.test('aabcd')); // trueconsole.log('---------------------');var reg = /^abc/;//  /^abc/ 必须以abc开头的字符串,才返回trueconsole.log(reg.test('abc'));  // trueconsole.log(reg.test('abcd')); // trueconsole.log(reg.test('aabcd')); // falseconsole.log('---------------------');var reg1 = /^abc$/;  // 精确匹配//  /^abc$/  要求必须是abc字符串,才符合规则console.log(reg1.test('abc'));  // trueconsole.log(reg1.test('abcd')); // falseconsole.log(reg1.test('abcabc')); // false

字符类

  • 字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内。

1. []  方括号

   /[abc]/.test('andy')     // true  []或者的意思 多选一

后面的字符串只要包含 abc 中任意一个字符,都返回 true 。

        // 字符类:[]表示有一系列字符可供选择,只要匹配其中一个就可以了var rg = /[abc]/;  // 只要包含有a 或者包含有b 或者包含有c  都返回trueconsole.log(rg.test('andy')); // trueconsole.log(rg.test('baby')); // trueconsole.log(rg.test('HELLO'));  // falsevar rg1 = /^[abc]$/;  // 三选一,只有是a 或者是b  或者是c  这个三个字母才返回trueconsole.log(rg1.test('a')); // trueconsole.log(rg1.test('aa')); // false

2. [-]  方括号内部 范围符-

   /^[a-z]$/.test(c')     // true

方括号内部加上 - 表示范围,这里表示 a 到 z 26个小写英文字母都可以。

        var rg2 = /^[a-z]$/;  // 26个小写英文字母,任何一个字母都返回trueconsole.log(rg2.test('y')); // trueconsole.log(rg2.test('Y')); // falseconsole.log(rg2.test(1)); // false

3. [^]  方括号内部 取反符^

 /[^abc]/.test('andy')     // false

  • 方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 。
  • 注意和边界符 ^ 区别,边界符写到方括号外面。
        // 如果中括号里面有^ 表示取反的意思,千万和我们边界符^ 别混淆var rg4 = /^[^a-zA-Z0-9_-]$/;console.log(rg4.test('-'));  // falseconsole.log(rg4.test('!'));  // true

4. 字符组合

        // 字符组合// 26个英文字母(大写和小写都可以),或者数字0-9,或者_下划线,或者-短横线,任何一个字母都返回truevar rg3 = /^[a-zA-Z0-9_-]$/; // 多选一的过程console.log(rg3.test('-'));   // trueconsole.log(rg3.test('N'));   // trueconsole.log(rg3.test('7'));   // trueconsole.log(rg3.test('_'));   // trueconsole.log(rg3.test('_000')); // false

量词符

量词符用来设定某个模式出现的次数。

  • *  相当于>=0  可以出现0次或者很多次
  • + 相当于 >=1  可以出现1次或者很多次

  • ? 相当于 1 || 0

  • {3} 重复3次

  • {3,}  大于等于 3

  • {3,12} 大于等于3 并且 小于等于12

        // *  相当于>=0  可以出现0次或者很多次var reg = /^a*$/;console.log(reg.test(''));  // trueconsole.log(reg.test('a'));  // trueconsole.log(reg.test('aaaa'));  // true// + 相当于 >=1  可以出现1次或者很多次var reg = /^a+$/;console.log(reg.test(''));  // falseconsole.log(reg.test('a'));  // trueconsole.log(reg.test('aaaa'));  // true// ? 相当于 1 || 0var reg = /^a?$/;console.log(reg.test(''));  // trueconsole.log(reg.test('a'));  // trueconsole.log(reg.test('aaaa'));  // false// {3} 重复3次var reg = /^a{3}$/;console.log(reg.test(''));  // falseconsole.log(reg.test('a'));  // falseconsole.log(reg.test('aaa'));  // true// {3,}  大于等于 3var reg = /^a{3,}$/;console.log(reg.test(''));  // falseconsole.log(reg.test('a'));  // falseconsole.log(reg.test('aaa'));  // trueconsole.log(reg.test('aaaaaaa'));  // true// {3,12} 大于等于3 并且 小于等于12var reg = /^a{3,12}$/;console.log(reg.test('a'));  // falseconsole.log(reg.test('aaa'));  // trueconsole.log(reg.test('aaaaaaa'));  // trueconsole.log(reg.test('aaaaaaaaaaaaaaaaaaaaa'));  // false

案例:用户名验证

  • 功能需求:
  • 如果用户名输入合法, 则后面提示信息为 :  用户名合法,并且颜色为绿色
  • 如果用户名输入不合法, 则后面提示信息为:  用户名不符合规范, 并且颜色为绿色

分析:

  • 用户名只能为英文字母,数字,下划线或者短横线组成, 并且用户名长度为 6~16位.
  • 首先准备好这种正则表达式模式 /$[a-zA-Z0-9-_]{6,16}^/
  • 当表单失去焦点就开始验证.
  • 如果符合正则规范, 则让后面的span标签添加 right 类.
  • 如果不符合正则规范, 则让后面的span标签添加 wrong 类.

<body><input type="text" class="uname"> <span class="message">请输入用户名</span><script>// 量词是设定某个模式出现的次数var reg = /^[a-zA-Z0-9_-]{6,16}$/; // 数字 字母 下划线 短横线 多选一// 获取元素var uname = document.querySelector('.uname');var message = document.querySelector('.message');// 当表单失去焦点uname.addEventListener('blur', function () {if (reg.test(this.value)) {message.className = 'right';message.innerHTML = '用户名格式输入正确';} else {message.className = 'wrong';message.innerHTML = '用户名不符合规范';}})</script>
</body>

括号总结

  • 大括号  量词符.   里面表示重复次数
  • 中括号 字符集合.  匹配方括号中的任意字符.
  • 小括号 表示优先级
        // 中括号 字符集合 匹配括号中的任意字符/^[abc]$/;  //   a || b || c// 大括号 量词符 里面表示重复次数/^abc{3}$/;  // 只是让c重复三次  abccc// 小括号  表示优先级/^(abc){3}$/;  // 让abc重复三次

在线测试:https://c.runoob.com/front-end/854/

预定义类

预定义类指的是某些常见模式的简写方式。

正则表达式里面的或者 |

 座机号码验证:

        // 座机号码验证:全国座机号码 两种格式:010-12345678  或者 0530-1234567// 正则里面的或者符号 | var reg = /^\d{3}-\d{8}|\d{4}-\d{7}$/;var reg = /^\d{3,4}-\d{7,8}$/;console.log(reg.test('0311-2345678')); // true

案例:表单验证

分析:

  • 手机号码:     /^1[3|4|5|7|8][0-9]{9}$/
  • QQ: [1-9][0-9]{4,} (腾讯QQ号从10000开始)
  • 昵称是中文:     ^[\u4e00-\u9fa5]{2,8}$  从第一个汉字到第二个汉字  2-8位
  • 短信验证码:^\d{6}$   六位数字
  • 密码:^[a-zA-Z0-9-_]{6,16}$   6-16位的数字字母-和_
window.onload = function () {var regtel = /^1[3|4|5|7|8]\d{9}$/; // 手机号码的正则表达式 var regqq = /^[1-9]\d{4,}$/;  // qq号的正则表达式 qq从10000开始 var regnc = /^[\u4e00-\u9fa5]{2,8}$/;  // 昵称的正则表达式var regmsg = /^\d{6}$/;  //短信验证码的正则表达式 六位数字var regpwd = /^[a-zA-Z0-9-_]{6,16}$/; // 密码的正则表达式 6-16位的数字字母-和_var tel = document.querySelector('#tel');var qq = document.querySelector('#qq');var nc = document.querySelector('#nc');var msg = document.querySelector('#msg');var pwd = document.querySelector('#pwd');var surepwd = document.querySelector('#surepwd');regexp(tel, regtel);regexp(qq, regqq);regexp(nc, regnc);regexp(msg, regmsg);regexp(pwd, regpwd);// 表单验证的函数function regexp(ele, reg) {ele.addEventListener('blur', function () {if (reg.test(this.value)) {this.nextElementSibling.className = 'success';this.nextElementSibling.innerHTML = '<i class="success_icon"></i>输入正确';} else {this.nextElementSibling.className = 'error';this.nextElementSibling.innerHTML = '<i class="error_icon"></i>格式不正确,请重新输入';}})}surepwd.addEventListener('blur', function () {if (this.value == pwd.value) {this.nextElementSibling.className = 'success';this.nextElementSibling.innerHTML = '<i class="success_icon"></i>输入正确';} else {this.nextElementSibling.className = 'error';this.nextElementSibling.innerHTML = '<i class="error_icon"></i>两次输入密码不一致';}})
}

正则表达式中的替换

replace 替换

  • replace() 方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或是一个正则表达式。
        // replace 替换var str = 'andy和red';var newStr = str.replace(/andy/, 'baby');console.log(newStr);
  • 第一个参数:   被替换的字符串 或者  正则表达式
  • 第二个参数:   替换为的字符串
  • 返回值是一个替换完毕的新字符串

正则表达式参数

/表达式/[switch]

switch(也称为修饰符) 按照什么样的模式来匹配. 有三种值:

  • g:全局匹配
  • i:忽略大小写
  • gi:全局匹配 + 忽略大小写
text.value.replace(/激情/g, '**'); // 全局匹配

案例:敏感词过滤

    <textarea name="" id="message" cols="30" rows="10"></textarea><button>提交</button><div></div><script>var text = document.querySelector('textarea');var btn = document.querySelector('button');var div = document.querySelector('div');btn.onclick = function () {div.innerHTML = text.value.replace(/激情|gay/g, '**'); // 敏感词过滤 全局匹配}</script>

JavaScript | 正则表达式相关推荐

  1. JavaScript正则表达式快速判断技巧

    原文:JavaScript正则表达式快速判断技巧 这里是JS的正则的一点心得,并不是最完整的规则汇总,更侧重实际运用中的快速判断,初学者接触正则之后往往会被一堆星号括号给弄晕,有了一些速判技巧就能从整 ...

  2. javascript 正则表达式详解

    正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...

  3. 经典JavaScript正则表达式实战

    来源:http://www.cainiao8.com/web/js_note/js_regular_expression_blueidea.html 目录 1. 正则表达式实战...1    2. 匹 ...

  4. 温故知新 javascript 正则表达式

    温故知新 javascript 正则表达式 转载:http://www.cnblogs.com/libinqq/archive/2008/07/31/1257699.html 很长时间没看 正则表达式 ...

  5. javascript正则表达式小结

    总结了一下javascript正则表达式的内容.表格形式,一目了然.辅以Example图形解释. 一.元字符 二.反义字符 三.转义字符 四.重复匹配 五.分组/捕获 六.贪婪与惰性 七.修饰符 ex ...

  6. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  7. 好程序员web前端分享使用JavaScript正则表达式如何去掉双引号

    为什么80%的码农都做不了架构师?>>>    好程序员web前端分享使用JavaScript正则表达式如何去掉双引号,最近接了一个项目,项目需求需要用js正则表达式过滤掉页面文本域 ...

  8. JavaScript 正则表达式

    JavaScript  正则表达式 版权声明:未经授权,严禁转载! 正则表达式 什么是正则表达式 正则表达式是用来描述一种特定格式的字符规则的表达式. 正则表达式常用语在一段文本中搜索,匹配或者替换特 ...

  9. js php 正则差别,JavaScript正则表达式的浏览器的差异

    JavaScript中的正则表达式在不同的浏览器中得到的结果可能会有差异,下面把正则表达式在五大主流浏览器(IE.Firefox.Chrome.Safari.Opera,以当前版本为准)之间的差异整理 ...

  10. 玩转JavaScript正则表达式

    Why Regular Expression 我们先来看看,我们干哈要学正则表达式这玩意儿: 复杂的字符串搜寻.替换工作,无法用简单的方式(类似借助标准库函数)达成. 能够帮助你进行各种字符串验证. ...

最新文章

  1. 甘利俊一 | 信息几何法:理解深度神经网络学习机制的重要工具
  2. java ADT生成带签名的apk
  3. 9.2 mnist_with_summaries tensorboard 可视化展示
  4. Improving RGB-D SLAM in dynamic environments: A motion removal approach
  5. idea中修改jsp文件不用再重启tomcat的方法
  6. Ionic 4.0.2 发布,移动应用开发框架
  7. java第七章jdbc课后简答题_java学习路线流程
  8. java 文件分割器_Java分割器
  9. 数学基础加强1---机器学习与数学分析
  10. AutoPtr 的局限性
  11. VS Code下载安装
  12. 现代控制理论公式大赏
  13. Zookeeper框架Curator使用
  14. Python面向对象06/反射/双下方法
  15. 【英语学习】【医学】生物化学(biochemistry)系统
  16. 【分享】一年级古诗古朗月行语文知识点心田花开汇总
  17. 环信php创建群组,群组@功能
  18. 淘宝精准库存接口获取商品ID下所有的sku精准库存
  19. Robot Arm from solidworks to ros
  20. 支付宝与微信新年红包战之我见

热门文章

  1. tmac v6设置中文_(转载)pktgen使用详细教程
  2. C#中设置Excel单元格格式
  3. 基于jsp、javaweb企业员工信息管理系统
  4. 多种方法使用GloVe
  5. ftp登陆报错530 Login incorrect. Login failed.
  6. d2-admin-路由菜单
  7. 通过Delphi打造自己的文本编辑器
  8. C语言 栈的链表实现
  9. 用excel图表误差线显示均值和标准差(转)
  10. C++ template —— tuple(十三)