正则表达式总结

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

正则表达式总结


正则表达式概述


  1. 什么是正则表达式?


  • 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。
  • 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,例如表单验证:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等。
  • 其他语言也会使用正则表达式,但是这主要是利用 JavaScript 正则表达式完成表单验证。


正则表达式的特点


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


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


  1. 对于刚接触的人来说,比较晦涩难懂。比如:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$这是验证邮箱的表达式。


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


正则表达式在 JavaScript 中的使用


创建正则表达式


在 JavaScript 中,可以通过两种方式创建一个正则表达式。1. 通过调用 RegExp 对象的构造函数创建。

// 语法:var 变量名 = new RegExp(/表达式/)
var regexp = new RegExp(/123/)

2. 通过字面量创建。

// 语法:var 变量名 = /表达式/
var rg = /123/


测试正则表达式 test


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


  • 主要作用:
  1. regexobj 是写的正则表达式。
  2. str 是我们要测试的文本。
  3. 就是检测 str 文本是否符合我们写的正则表达式规范。


正则表达式中的特殊字符


正则表达式的组成


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


  1. 特殊字符非常多,可以参考:
  • MDN
  • 正则测试工具


边界符


  • 正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符。
边界符 说明
^ 表示匹配行首的文本(以谁开始)
$ 表示匹配行尾的文本(以谁结束)
  • 正则表达式里面不需要加引号,不管是数字型还是字符串型。
  • 如果 ^ 和 $ 在一起,表示必须是精确匹配。
  • 如果中括号里面有 ^ ,表示取反的意思,千万和边界符 ^ 区分开。
var rg = /abc/
// /abc/ 只要包含有 abc 这个字符串返回的都是 true。
console.log(rg.test('abc'))
console.log(rg.test('abcd'))
console.log(rg.test('aabcd'))
var reg = /^abc/
console.log(rg.test('abc')) // true
console.log(rg.test('abcd'))  // true
console.log(rg.test('aabcd')) // false
var reg = /^abc$/ // 精确匹配,要求必须是 abc 字符串才符合规范。
console.log(rg.test('abc')) // true
console.log(rg.test('abcd'))  // false
console.log(rg.test('aabcd')) // false


字符类


  1. []表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内
var rg = /[abc]/  // 只要包含有 a 或者 b 或者包含有 c 都返回 true。
console.log('andy') // true
console.log('body') // true
console.log('color')  // true
console.log('red')  // false
var rg = /^[abc]$/  // 三选一,只有是 a 或者是 b 或者是 c 这三个字母才返回 true。
console.log('aa') // false
console.log('a')  // true
console.log('b')  // true
console.log('c')  // true
console.log('abc')  // false

[-] 方括号内部范围符-z

var reg = /^[a-z]$/ // 26个英文字母任何一个返回 true。其他的都是 false (包括大写字母)
// - 表示的是 a-z 的范围。

3.字符组合

var reg = /^[a-zA-Z0-9_-]$/ // 26个英文字母(大写和小写都可以)任何一个返回 true。


正则表达式中的量词符


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

量词 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

多次出现

var reg = /^[a-zA-Z0-9_-]${6,16}/
// {6,16}之间不能有空格。
// 这个模式能出现6-16次。


用户名验证


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


  • 分析:
  1. 用户名只能为英文字母、数字、下划线或者短横线组成,并且用户名长度为6~16位。
  2. 首先准备好这种正则表达式模式:/^[a-zA-Z0-9_-]{6,16}$/
  3. 当表单失去焦点时就开始验证。
  4. 如果符合正则规范,则让后面的 span 标签添加 right 类。
  5. 如果不符合正则规范,则让后面的 span 标签添加 wrong 类。
<style>
  span{
      color: #aaa;
      font-size: 14px;
  }
  .right{
      color: green;
  }
  .wrong{
      color: red;
  }
</style>
<body>
    <input type="text" class="uname"><span>请输入用户名</span>
    <script>
      var uname = document.querySelector('.uname')
    var span = document.querySelector('span')
    var reg = /^[a-zA-Z0-9_-]{6,16}$/
    uname.onblur = function(){
        if(reg.test(this.value)){
            span.className = 'right'
            span.innerHTML = '用户名格式输入正确'
        }else{
            span.className = 'wrong'
            span.innerHTML = '用户名格式输入错误'
        }
    }
    </script>
</body>


括号总结


  1. 大括号:量词符,里面表示重复次数。
  2. 小括号:表示优先级。
  3. 中括号:字符集合,匹配方括号中的任意字符。


正则表达式中的预定义类


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

预定义类 说明
\d 匹配0-9之间的任一数字,相当于[0-9]
\D 匹配所有0-9以外的字符,相当于[^0-9]
\w 匹配任意的字母、数字和下划线,相当于[a-zA-Z0-9_]
\W 除所有字母、数字和下划线以外的字符,相当于[^a-zA-Z0-9_]
\s 匹配空格(包括换行符、制表符、空格符等),相当于[\t\r\n\v\f]
\S 匹配所有非空格的字符,相当于[^\t\r\n\v\f]
## 正则表达式中的替换


### replace 替换


replace() 方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或是一个正则表达式。


语法:stringObject.replace(regexp/substr,replacement)


  • 第一个参数:被替换的字符串或者正则表达式。
  • 第二个参数:替换为的字符串。
  • 返回值是一个替换完毕的新字符串。
  • replace 只能替换第一个需要替换的值。


正则表达式参数


语法:/表达式/[switch]

  • switch(也称为修饰符)按照什么样的模式来匹配,有三种值:
  1. g:全局匹配。
  2. i:忽略大小写。
  3. gi:全局匹配,忽略大小写。
相关文章
正则表达式:理解与运用
正则表达式:理解与运用
85 0
|
3月前
|
测试技术
正则表达式
正则表达式
30 1
|
JavaScript 数据安全/隐私保护
|
自然语言处理 JavaScript 前端开发
常用正则表达式
常用正则表达式
133 0
正则表达式引例
正则表达式引例
148 0
|
前端开发 JavaScript Java
正则表达式总结
创建正则表达式 1.使用RegExp()构造函数来创建 RegExp()构造函数非常有用,特别是在需要动态创建正则表达式的时候,这种情况往往没办法通过写死在代码中的正则表达式直接量来实现。
1033 2
|
Web App开发 JavaScript 前端开发
正则表达式小记
什么是正则表达式 正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、replace、search 和 split 方法。
1218 0