Wang's blog Wang's blog
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Wang Mings

跟随大神,成为大神!
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Python爬虫

  • 前端教程

    • 团队规范

    • Project

    • JS

      • Canvas基础
      • 数据结构
      • 树的深度优先遍历与广度优先遍历
      • for in和for of区别
      • ES6-新增特性一览
      • ES6-解构赋值及原理
      • ES6-Object
      • ES6-模块详解
      • ES6-Class
      • ES6-ECMAScript特性汇总
      • 输入URL背后的技术步骤
      • JavaScript与浏览器 - 线程与引擎
      • HTTP跨域解决方案
      • Http 2与Http 1.x比较
      • JavaScript原型
      • JavaScript继承
      • JavaScript事件循环
      • 动手实现Promise
      • JS设计模式
      • JS 经典面试题
      • 排序算法
      • 正则表达式
        • [#](#限定符) 限定符
        • [#](#贪婪模式-非贪婪模式) 贪婪模式/非贪婪模式
        • [#](#正则方法) 正则方法
          • [#](#regex-exec-string) regex.exec\(string\)
          • [#](#regex-test-string) regex.test\(string\)
          • [#](#string-match-regex) string.match\(regex\)
          • [#](#string-search-regex) string.search\(regex\)
        • [#](#其他) 其他
      • MVC、MVP、MVVM区别
      • Array API与V8源码解析
      • 从V8 sort源码看插入排序
    • NodeJS

    • Vue

    • React

    • 效率工具

    • 读书笔记

  • 教程
  • 前端教程
  • JS
wangmings
2022-07-19
目录

正则表达式

# # 正则表达式

正则表达式对于每个开发者都非常重要,用的好能在一些关键时刻让自己变得轻松。推荐个正则可视化工具:regulex (opens new window) (opens new window),帮助学习者直观验证。再推荐Regex Tester (opens new window) (opens new window)进行在线调试。

原理:

  1. 解析
    • 语法分析
    • 词法分析
  2. 编译
    • 状态机
  3. 运行

# # 限定符

    * 0次或多次
    + 1次或多次
    ? 0次或1次
    {n} 匹配n次
    {n,} 至少n次
    {n, m} 至少n次,至多m次
    
1
2
3
4
5
6
7
    \ 转义符
    . 任意字符
    | 或运算
    \d = [0-9]
    \D = [^0-9]
    \w = [a-zA-Z0-9_]
    \W = [^a-zA-Z0-9_]
    \s 空白字符
    \S 非空白字符
    ^ 定位符,字符串起始位置;当在[]号时代表取反。
    $ 定位符,字符串末尾位置。
    
1
2
3
4
5
6
7
8
9
10
11
12

# # 贪婪模式/非贪婪模式

贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配。常用的有* 和 +限定符

    /.*/g
    
1
2

非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配。

    // 遇到?,尽可能少的匹配
    /.*?/g
    
1
2
3

# # 正则方法

# # regex.exec(string)

如果匹配成功,exec() 方法返回一个数组;匹配失败,返回 null

    let regexExec = /#(.*)$/.exec('http://localhost:8081/#/demo')
    /*
    [ '#/demo',
    '/demo',
    index: 22,
    input: 'http://localhost:8081/#/demo' ]
    */
    
1
2
3
4
5
6
7
8

# # regex.test(string)

查看正则表达式与指定的字符串是否匹配。返回 true 或 false

    let regexTest = /#(.*)$/.test('http://localhost:8081/#/demo') // true
    
1
2

# # string.match(regex)

  • 在非全局匹配模式下,类似regex.exec(string)。
  • 在全局匹配模式下(使用g标志),则将返回与完整正则表达式匹配的所有结果(Array),但不会返回捕获组,或者未匹配 null。
    // 非全局匹配模式
    let stringMatch = 'http://localhost:8081/#/demo'.match(/#(.*)$/)
    // [ '#/demo',
    // '/demo',
    // index: 22,
    // input: 'http://localhost:8081/#/demo' ]
    
    // 全局匹配模式
    let stringMatch = 'http://localhost:8081/#/demo'.match(/#(.*)$/g) // [ '#/demo' ]
    
1
2
3
4
5
6
7
8
9
10

# # string.search(regex)

匹配成功,search() 返回正则表达式在字符串中首次匹配项的索引,否则返回 -1。类似regex.test()

    let stringSearch = 'http://localhost:8081/#/demo'.search(/#(.*)$/) // 22
    
1
2

# # 其他

其他正则相关语法@jawil总结的十分详细,故转载在此。 以下图片有个谬误,这里纠正下:\w 匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]。

编辑 (opens new window)
排序算法
MVC、MVP、MVVM区别

← 排序算法 MVC、MVP、MVVM区别→

最近更新
01
theme-vdoing-blog博客静态编译问题
09-16
02
搜索引擎
07-19
03
友情链接
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2022 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式