正则表达式基础

先上文档: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);
原文地址:https://www.cnblogs.com/arissy/p/10046284.html