正则表达式回顾

417 阅读2分钟

说明

  • 最近的业务正则较多,特此回顾一下基本用法
  • 适用于 正则表达式的有经验的朋友。

匹配任意字符


let reg = /a../g;
reg.test('aqw'); //true

匹配字母和数字

let reg = /\w/g;
reg.test('1231qwesadFSD');
//true
//匹配所有的数字和大小写字母

let regNumber = /\d/g;
regNumber.test('31241320');
//true
// 匹配所有的数字

// \D 和 \W 就是补集

集合和匹配多个


//目标匹配 ‘yo,Yo,yO’ 
let bad = /yo/g;
let reg = /[Yy][Oo]+/g;
reg.test('Yo'); // true
reg.test('yO'); // true
//集合的重要性

单词边界

  • \b

let reg = /yo{1,4}\b/;
reg.test('yo'); // true
reg.test('yoo'); // true
reg.test('yooo'); // true
reg.test('yooooooooooo'); // false 因为单词边界

分组

  • $1 $2 的使用 replace 的使用

let reg = /(ad)..(cd)/g;
'adqwcd'.replace(reg,'$1 123 -- $2')
// ad 123 -- cd

匹配不捕获

  • 这样的话第一组就会 undefined,第二组变成第一组。只匹配不捕获分组

let reg = /(?:ad)..(cd)/g;
'adqwcd'.replace(reg,'$1 123 -- $2')
// cd 123 -- undefined

正向预查(匹配右边)和反向预查(匹配左边)

  • 未做详细的解释,大家可以查阅详细的资料

// 100元
// 1000元
// 100刀
// 1000镑
let reg = /\d+(?=元)/


let reg = /(?<=¥|\d)\d+/
// ¥100
// $ 100
// 

速查表

符号 描述 例子 能匹配 不能匹配
^ 行首或字符串开始 ^yo yo ayo
$ 行末或字符串结束 yo$ yo yop
\b 单词边界 \byo\b mu yo mu muyomu
\B 非单词边界 \Byo\B muyomu mu yo mu
符号 描述 例子 能匹配 不能匹配
(?=xxx) 正向肯定预查,从任何匹配xxx的字符串开始处匹配查找字符串 yo(?=o) yoo yo
(?!xxx) 正向否定预查,从任何不匹配pattern的字符串开始处匹配查找字符串 yo(?!o) yo yoo
(?<=xxx) 反向肯定预查,与正向肯定预查类拟,只是方向相反 (?<=y)o yo yoo
(?<!xxx) 反向否定预查,与正向否定预查类拟,只是方向相反 (?<!goo)d mood good
符号 描述 例子 能匹配 不能匹配
[ ] 字符集合 [ace] a, c, e d
[ - ] 字符范围 [a-c] a, b, c d
[^ ] 不包含的字符集合 [^abc] d, e a, b, c
. 匹配除断行外的任何字符 yo. yoo, yop, yoh yo
\s 空白字符,等于[\n\r\f\t ] la\sla la la lala
\S 非空白字符,等于[^\n\r\f\t] la\sla lala la la
\d 数字 \d{2} 23 1a
\D 非数字 \D{3} yoo, abc yo1
\w 单词,等于[a-z-A-Z0-9_] \w{4} v123 v12.3
\W 非单词,等于[^a-z-A-Z0-9_] .$%? .$%? .ab?
特殊字符 描述
\n 断行
\r 回车符
\t 制表符
\v 垂直制表符
\f 换页
[\b] 退格
符号 描述 例子 能匹配 不能匹配
| 或,其一 a|b a, b c
(xxx) 匹配xxx并获取这一匹配 yo(o|p) yoo 或 yop yoh
(?:xxx) 匹配xxx但不获取这一匹配 y(?:o) yo ya
+ 重复1次或多次 yo+ yo, yooo y
* 重复0次或多次 yo* y, yoo yop
? 出现0次或1次 yo? y, yo ye
?? ?的懒惰模式,尽可能少匹配 yoo?? yo yoo
+? +的懒惰模式 yo+? yo yoo
*? *的懒惰模式 yo*? y yo
{n} 重复n次 yo{2} yoo yooo
{n,m} 重复n到m次 yo{1, 3} yo,yooo yoooo
{n,} 重复至少n次 yo{2,} yoo, yooo yo