JS正则表达式

120 阅读1分钟

1.字面量创建正则表达式

/u/.test('love you')

2.使用对象创建正则表达式

let str = 'love you';

let reg = new RegExp('u', 'g');

reg.test(str)

3.选择符

左右两边的表达式 /a|@/.test('a pig') 原子表中不需要‘|’ 如 /[123]/表示1或者2或者3 原子组中需要 ‘|’,如/(12|34)/表示12或者34

4.正则表达式中的转义

在对象创建正则时相对于字面量创建要多加一层转译 如:new RegExp('\\d+\\.\\d+') 等价于 /\d+\.\d+/

5字符边界约束

限定起始边界:/^\d/ 限定结束边界:/\d$/

6.元字符说明集合

\d :匹配数字

\D :除了数字以外的其他

\s :空白(空格,换行,制表符等都包括)tip: 空格和abc 一样

\S : 除了空白以外的其他

\w :匹配字母数字下划线

\W :匹配除字母数字下划线之外的其他

. :除了换行符之外的任何, 匹配www.baid.com中的'.'字符,需要额外转译 \.

7.如何巧妙匹配所有字符-利用利用原子标的可选行

/[\d\D]+ / /[\s\S]+/

8.模式修正符

作用:修改正则表达式的运行方式

i:不区分大小写

g: 全局匹配,中间没有,跳过继续

y: 连续满足,遇到不满足的,停止

m:每行单独处理 s:多行视为单行处理

9.字符属性检查

\p : 检查字符的每一个属性

/\p{L}/gu : 匹配每一个包含字母的字符

/\p{P}/gu : 匹配每一个包含标点符号的字符

/\p{sc=Han}/gu : 匹配每一个包含中文的字符------匹配中文的方式

+ :代表+前面的字符至少出现一次

* :代表*前面的内容出现0次或多次

? :代表?前面的字符只能出现0次或者1次

原子组demo: /^\d{4}([-/])\d{2}\1\d{2}/g

原子表中[]的()就是字符(),外面表示原子组,. +也是

10.排除匹配

在原子表中加^,如/[^ue]/gi

11.认识原子组

(h[1-6]):认为是一个整体,从左到右,依次为\1 \2 \3

原子组嵌套分组与不记录组的情况:

/https?:\/\/w{3}(\w+\.(?:com|cn|net))/

12.多个正则校验一个字符串

let regs = [/^[a-z0-9]$/i, /[A-Z]/, /[0-9]/];

let result = regs.every(reg => reg.test(str))

13.❓禁止贪婪

let hd = ‘hdddd’;

hd.match(/hd?/) 匹配一个

hd.match(/hd{2,5}?/) 匹配2个

hd.match(/hd??/) 匹配0个

14.exec完成全局匹配

const search = (string, reg) => {

let result = [];
while ((let res = reg.exec(string))) {

    result.push(res)
}
return result;
  }

15.正则表达式的方法

search :str.search (/\d/或者‘u’),返回索引,没有返回-1

match :str.match (/\d/或者‘u’),返回匹配到的内容,不会返回细节,比如原子组的内容

matchAll: str.matchAll (/\d/或者‘u’),返回迭代器,用of迭代

split: str.split(/[-/]/)

replace: str.replace(///g, '-')

image.png