正则表达式学习

·  阅读 170

JS正则表达式简介

正则表达式就是按照某种规则去匹配符合条件的字符串。

正则表达式工具:regexper.com/

RegExp对象

实例化RegExp 的方法:

  • 字面量

    var reg = /\bis\b/g // \b 代表单词边界

    'he is a boy. This is a dog.'.replace(reg, 'IS) //he IS a boy. This IS a dog.

  • 构造函数

    var reg = new RegExp('\bis\b', 'g); 'he is a boy. This is a dog.'.replace(reg, 'IS) //he IS a boy. This IS a dog.

修饰符

  • g: global 全文搜索,不添加,搜索到第一个匹配停止
  • i:ignre case 忽略大小写,默认大小写敏感
  • m: multiple lines 多行搜索(包含换行符的情况)

元字符

元字符是在正则表达式中有特殊含义的非字母字符

* + ? $ ^ . | \ () {} []

  • \t  : 水平制表符
  • \v: 垂直制表符
  • \n: 换行符
  • \r: 回车符
  • \0: 空字符
  • \f: 换页符
  • \cX: 与X对应的控制字符(Ctrl + X)

字符类

使用元字符[] 来构建一个简单的类

[abc] 表示字符a 或b 或c 归为一类,表达式可以匹配这类的字符
复制代码

字符类取反 (使用元字符^创建 反向类/负向类)

[^abc] 表示 不是字符a 或b 或c的内容
复制代码

范围类

[a-z] 表示从a到z的任意字符
[a-zA-Z0-9] 表示a-z A-Z 0-9
复制代码

预定义类

例: 匹配一个 ab + 数字 + 任意字符的字符串
ab[0-9][^\r\n]
ab\d.
复制代码

边界

量词

匹配一个连续出现多次的字符串

贪婪模式 

正则表达式是尽可能多的去匹配

\d{3,6} 去匹配 12345678
// 123456
复制代码

非贪婪模式

让正则表达式尽可能少的匹配,

‘123456789’.match(/\d{3,5}?/g)
// ['123', '456', '789']
复制代码

分组

使用()可以达到分组的功能。使量词作用于分组

匹配字符串 Byron 连续出现3次
Byron{3} // 错误的  它标示 n 连续出现3次
(Byron){3} // 正确 
复制代码

或 (|)

Byron | Casper     

Byr(on|Ca)sper

反向引用

2020-10-12 => 10/12/2020

'2020-10-12'.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$2/$3/$1')
// '10/12/2020'
复制代码

忽略分组

不希望捕获某些分组,只需要在分组内加上?: 

(?:Byron).(ok)
$1 为 OK
复制代码

前瞻

正则表达式从文本头部向尾部解析,文本尾部方向,称为‘前’

前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/后瞻方向相反(js 不支持后顾)

'a2*3'.replace(/\w(?=\d)/g, 'X')
// X2*3
'a2*v3vv'.replace(/\w(?=\d)/g, 'X')
//'X2*X3vv'
复制代码

js RegExp 方法

  • RegExp.prototype.test(str)

用来测试字符串参数中是否存在匹配正则表达式模式的字符串  返回 Boolean

  • RegExp.prototype.exec(str)

使用正则表达式模式对字符串执行搜索,并将更新全局RegExp 对象的属性以反映匹配结果

如果没有匹配的文本则返回null, 否则返回一个结果数组;

  • index 声明匹配文本的第一个字符的位置
  • input 存放被检索的字符串 string
分类:
前端
分类:
前端
收藏成功!
已添加到「」, 点击更改