正则表达式基础
先上文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions;
正则历史:维基百科;
接下来由很浅入浅来分类学习正则基础:
元字符
| 常用元字符 | 含义 |
|---|---|
| . | 匹配除换行符以外的任意字符 |
| \w | 匹配字母或数字或下划线 |
| \W | 匹配不是字母、数字、下划线的字符 |
| \d | 匹配数字,相当于[0-9] |
| \D | 匹配不是数字的字符 |
| \s | 匹配任意不可见的字符,包括空格、制表符、换行符等 |
| \S | 匹配任意可见字符 |
| ^ | 匹配字符串开始位置 |
| $ | 匹配字符串结束位置 |
| \ | 转义字符. 在非特殊字符之前的反斜杠表示下一个字符是特殊的,不能从字面上解释。相反,反斜杠也可以将其后的特殊字符,转义为字面量。 |
量词
| 常用量词 | 含义 |
|---|---|
| * | 重复任意次, 相当于 |
| ? | 重复0次或者1次, 相当于 |
| + | 重复1次或者更多次,相当于 |
| 重复n次 | |
| 重复n次或者大于n次 | |
| 重复n到m次 |
分支&字符集
| 常用字符 | 含义 |
|---|---|
| x | y |
| [abc] | 一个字符集合, 匹配方括号的中任意字符. [abc] == [a-c] |
| [^abc] | 一个反向字符集, 匹配任何没有包含在方括号中的字符. [^abc] == [^a-c] |
零宽断言 (lookaround assertions)
- 也翻译成环视
- 根据方向的不同,分为lookahead和lookbehind
- 根据判断原则,分为肯定和否定。
| 正向/预测现行/顺序 从左到右/pattern的前面位置 |
负向/回顾后发/逆序 从右到左/pattern的后面位置 |
|
|---|---|---|
| 肯定/正 | (?=pattern) | (?<=pattern) |
| 否定/负 | (?!pattern) | (?<!pattern) |
惰性&贪婪
- 贪婪模式——在匹配成功的前提下,尽可能多的去匹配
- 惰性模式——在匹配成功的前提下,尽可能少的去匹配
- /.*bbb/g.test('abbbaabbbaaabbb1234')
- /.*?bbb/g.test('abbbaabbbaaabbb1234')
- 贪婪模式⽤用于匹配优先量量词修饰的⼦子表达式
- 惰性模式⽤用于匹配忽略略优先量量词修饰⼦子表达式
修饰符&标志
| 标志 | 描述 |
|---|---|
| g → global | 全局搜索 |
| i → ignoreCase | 不区分大小写搜索 |
| m → multiline | 多行搜索 |
| y → sticky | 执行“粘性”搜索,匹配从目标字符串的当前位置开始 |
| u → unicode | 表示按unicode(utf-8)匹配(主要针对汉字) |
| s → dotAll | 将字符串视为单行来匹配 |
使用方法
| 方法 | 描述 |
|---|---|
| exec | 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。 |
| test | 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。 |
| match | 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。 |
| search | 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。 |
| replace | 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。 |
| split | 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。 |
例:
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
var myRe = /d(b+)d/g;
var myArray = myRe.test("cdbbdbsbz");
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray); // ["fee ", "fi ", "fo "]
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr); // "Smith, John"
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
var pattern = /\s*;\s*/;
var nameList = names.split(pattern);

浙公网安备 33010602011771号