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