博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式学习
阅读量:6701 次
发布时间:2019-06-25

本文共 2063 字,大约阅读时间需要 6 分钟。

应用

  1. 输入校验
  2. AST 抽象语法树
  3. liunx命令

创建一个正则表达式

  1. 使用正则表达式字面量
const regex = /^\d{11}&/
  1. 使用构造函数
const regex = new RegExp(/^\d{11}&/, "gi")

如何判断正则表达式的类型?

  1. typeof
  2. instanceof RegExp

基础知识

元字符 必记

  • . 匹配\n以外的任意字符
  • \w 字母数字下划线 (a-zA-Z0-9_)
  • \W 非字母数字下划线
  • \d 数字 (0-9)
  • \D 非数字
  • \s 任意不可见字符 如空格 制表符 换行符
  • \S 任意可见字符
  • ^ 开始符 // 字符集里第一位代表 非
  • $ 结束符

量词——关于数量的词

  • {n} n次
  • {n, } 至少n次
  • {n,m} n到m次
  • * 重复任意次 相当于{0,}
  • ? 0-1次 {0,1}
  • + 至少1次 {1,}

分支和字符集合

  • (ax|by|cz) 分支
  • [abc] === [a-c] 字符集合
  • [^abc] === [^a-c] 字符集合
  • a-c 代表 abc
  • [] === [\x00-\xff] \x代表十六进制
  • [] === [\u0000-\u00ff] \u unicode编码
  • 中文字符[\u4e00-\u9fa5] unicode编码起始-结束

修饰符

  1. g global
var str = 'ha ha ha';var result = str.replace(/ha/, 'Hello'); var gResult = str.replace(/ha/g, 'Hello'); console.log(str); // "ha ha ha" console.log(result); // "Hello ha ha" console.log(gresult); // "Hello Hello Hello"
  1. i ignoreCase
  2. m multiline 多行
  3. y sticky [es2016]
  4. u unicode [es2018]
  5. s dotAll [es2018]d

高级

转义

  • 哪些字符需要转义? 一般产生歧义的字符都需要转义,常见转义符号如下
  1. .
  2. \
  3. ^
  4. $
  5. *
  6. +
  7. {}
  8. ()

分组&引用

  • /(\d{4})-(\d{2})-(\d{2})/ 分组,分三组

  • /(\d{4})-(\d{2})-\2/

    \2分组,对前两组的引用 内容一样非表达式一样

const result = /(\d{
4})-(\d{
2})-(\d{
2})/.exec('1111-22-33') result[0] // '1111-22-33' result[1] // '1111' result[2] // '22' result[3] // '33'
  • 具名分组 // [es2018]
const res = `1111-22-33`.match(/(?
\d{ 4})-(?
\d{ 2})-(?
\d{ 2})/) console.log(res) { 0: '1111-22-33', 1: '1111', 2: '22', 3: '33', groups: { year: 1111, month: 22 day: 33 } } console.log(res.groups) // {year: "1111", month: "22", day: "33"}
  • replace
`1111-22-22`.replace(/(\d{
4})-(\d{
2})-(\d{ 2})/, `$1/$2/$3`) // 1111/22/33
  • RegExp.$[_1-9]
  • ?: 分组不引用
  • \b 单词边界

方法

  • test 测试是否匹配的RegExp方法,返回true或false
  • exec RegExp方法,返回数组或null
  • match 字符串方法,返回数组或null
  • replace 字符串方法,返回替换后的结果字符串,不更改原字符串

lookaround assertions (零宽断言/环视)

  • 根据方向 分为 lookahead和lookbehind
  • 根据判定原则, 分为肯定和否定
  1. 正向 肯定 ?=pattern 如果pattern匹配 整个表达式匹配

  2. 正向 否定 ?!pattern 如果pattern匹配 整个表达式不匹配

  3. 反向 肯定 [es2018] ?<=pattern

  4. 反向 否定 [es2018] ?<!pattern

惰性 & 贪婪

  1. 贪婪模式 在匹配成功的前提下,尽可能多的去匹配。 匹配优先量词
  2. 惰性模式 在匹配成功的前提下,尽可能少的去匹配。 匹配忽略优先量词

参考:

转载于:https://www.cnblogs.com/BillyQin/p/10045035.html

你可能感兴趣的文章
BZOJ3424 : Poi2013 Multidrink
查看>>
eclipse 预览Android界面报错
查看>>
iOS:iOS开发系列–打造自己的“美图秀秀”(中)
查看>>
keepalived对nginx高可用演练脚本
查看>>
swift实现ios类似微信输入框跟随键盘弹出的效果
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
Linq之group子句
查看>>
jQuery图片轮播特效
查看>>
【转】人生应该接受的教育
查看>>
键盘收回方法
查看>>
docker 使用教程(2)常用命令
查看>>
在Java中>、>>、>>>三者的区别
查看>>
Android 手机卫士--home界面布局
查看>>
Android NDK 同时编译多个Module
查看>>
poi API
查看>>
8 -- 深入使用Spring -- 2...2 指定Bean的作用域
查看>>
MapReduce实战(一)自定义类型
查看>>
切换横屏幕 onCreate 多次执行问题
查看>>
A guide to analyzing Python performance
查看>>
export,source
查看>>