先上文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions;
正则历史:维基百科;
接下来由很浅入浅来分类学习正则基础:
元字符
常用元字符 | 含义 |
---|---|
. | 匹配除换行符以外的任意字符 |
w | 匹配字母或数字或下划线 |
W | 匹配不是字母、数字、下划线的字符 |
d | 匹配数字,相当于[0-9] |
D | 匹配不是数字的字符 |
s | 匹配任意不可见的字符,包括空格、制表符、换行符等 |
S | 匹配任意可见字符 |
^ | 匹配字符串开始位置 |
$ | 匹配字符串结束位置 |
转义字符. 在非特殊字符之前的反斜杠表示下一个字符是特殊的,不能从字面上解释。相反,反斜杠也可以将其后的特殊字符,转义为字面量。 |
量词
常用量词 | 含义 |
---|---|
* | 重复任意次, 相当于{0,} |
? | 重复0次或者1次, 相当于{0, 1} |
+ | 重复1次或者更多次,相当于{1,} |
{n} | 重复n次 |
{n,} | 重复n次或者大于n次 |
{n, m} | 重复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);