JS正则表达式(笔记)

根据B站小野森森老师的正则表达式的课程整理的笔记
课程链接

转义

转义符号和转义字符

image-20201104153517290

特殊转义字符

n 换行

r 回车

t 制表符 -> tab键 4个空格

image-20201104154452393

image-20201104154447824

字符串换行

image-20201104155157405

方法三: 可以用反引号 \` 定义多行字符串

正则表达式

RegExp = regular expression

初体验

实例化方式

image-20201104160509112

对象直接量

image-20201104161011786

如果要使用变量,则必须是用实例化方式

image-20201104161036090

注意

image-20201104161751551

image-20201104161755733

修饰符gim

image-20201104161955522

image-20201104162126306

表达式[]

[ ]

image-20201104162710233

连续三位每一位字符是什么

image-20201104163330164

区间写法

image-20201104163529585

image-20201104163820303

^符号

image-20201104164123865

|或

image-20201104164239365

image-20201104164321273

元字符

元字符是正则使用的转义字符

w W

image-20201104164935420

image-20201104165040864

d D

image-20201104165253100

s S

匹配一个空白字符

image-20201104170408527

b B

image-20201104171327199

.

可以匹配除了回车r和换行n的所有字符

image-20201104171505395

量词

正则匹配的原则:

字符串从左到右, 依次先匹配多, 再匹配少, 如果一旦匹配上就不回头匹配.

贪婪匹配原则: 能匹配上多个,绝不匹配少个

n+

{1,正无穷}

image-20201105150231776

n*

{0, 正无穷}

*号就是匹配n这个范围内的任意字符所出现的0次或多次的字符串,

先匹配多次的,匹配完多次的之后,空字符算是0次,所以也可以.

image-20201105150726280

image-20201105151049655

n?

{0, 1}

image-20201105151402422

n{x,y}

正则表达式中不要乱写空格

image-20201105151737963

y不写 默认{1,正无穷} === n+

image-20201105151848522

x=0,y不写 默认{0,正无穷} === n*

image-20201105152044578

^n

匹配任何以n开头的字符串,这个例子的结果错了,应该是['ab', 'ab']

image-20201105152817211

n$

匹配任何以n结尾的字符串,

image-20201105153008237

问题

检查字符串是否以abcd开头和以abcd结尾

image-20201105154307534

image-20201105154445587

检查字符串是否以abcd开头或以abcd结尾

image-20201105154548802

检查字符串是否以abcd开头和以abcd结尾 并且中间是数字

image-20201105154839022

reg=/^abcd[d]+abcd$/也可以

匹配以138开头的11位手机号码

image-20201105155116985

a(?=n)

匹配后面紧接着指定字符串n的字符串a, 叫正向预查

image-20201105155336990

a(?!n)

匹配后面紧接着的不是指定字符串n的字符串a, 也叫正向预查

xxxx xxyy

子表达式

(a) 括号里面包着的是子表达式

子表达式有记忆功能, 后面紧挨着的反向引用都会认为是匹配同一个字符

image-20201105160907274

反向引用

1 指的是你反向引用第1个子表达式

n 指的是你反向引用第n个子表达式

image-20201105160532781

xxyy

image-20201105161019597

(?:n)

str.match会把子表达式也捕获出来

捕获分组

a , b, c 三个子表达式都捕获

image-20201109094617318

不捕获分组

(?:a) 不让捕获这个子表达式

image-20201109094750715

正则对象属性

image-20201105161440542

正则对象方法

reg.test(str)

image-20201105161521753

reg.exec()

image-20201105162017334

这个方法是机械式的循环

image-20201105162425954

特性

image-20201105163427361

需要知道的现象

输出的数组中的index属性和reg.lastIndex属性的值保持一致,并且可以通过改变reg.lastIndex的值来改变index的值, 即修改匹配的位置

image-20201105162731346

image-20201105162549952

但是如果把lastIndex的值修改为不是3的倍数, 下一个index会变成大于lastIndex值的最小的3的倍数:

image-20201105163001149

此时,在执行一次reg.exec(str), lastIndex会自动跟index同步变为9

image-20201105163103161

str.match(reg)

image-20201106163407816

手机号校验

image-20201109095943018

出生日期校验

image-20201109100519682

image-20201109100523835

match与exec的区别

image-20201106163841634

str.split(reg)

字符串分割

image-20201106164117443

String构造的对象的方法

str.toUpperCase()

str.toLowerCase()

image-20201106164919288

str.toLocaleUpperCase()

str.toLocaleLowerCase()

针对一些比较特殊的语言, 比如土耳其语等语言中有特殊的大小写字母,这些语言的大小写转化要使用locale

针对英文字母, 加locale与否都能实现大小写转换功能

image-20201106164952526

str.charAt()

str.charCodeAt()

str.fromCharCode()

image-20201106165458616

str.substr()

前闭合 后长度

str.substring()

前闭后开

valueOf和toString的比较

1、toString 字符串 valueOf 返回原本的值

2、Date: toString 表示时间的特有的字符串 value0f 13位毫秒时间戳

3、数组: toString 数组元素用,分割的字符串 value0f 数组原本的值

4、对象: toString 对象的类型字符串表示‘[object Object] ' value0f 对象原本的值

5、toString function通过[native code]区分JS内置函数和自定义函数

6、toString接收一个参数-基数 radix value0f 没有参数

封装工具类函数

第一种

image-20201106172027574

第二种

image-20201106172107128

贪婪模式和非贪婪模式

默认是贪婪模式, 加一个?变成非贪婪模式

例子1

image-20201106200348606

image-20201106200345754

例子2

image-20201106200532279

image-20201106200606981

replace

他本身不具备全局匹配的能力

第一个参数: 要替换的字符串

第二个参数: 替换成的字符串

image-20201106200834231

image-20201106200947048

image-20201106201016432

xxyy -> yyxx

方法一:

image-20201106201325928

方法二:

image-20201106201913452

image-20201106202017283

js-plus-plus -> jsPlusPlus

一定要打括号才是子表达式

image-20201106202442332

jsPlusPlus -> js\_plus\_plus

image-20201106202903235

aabbcc -> a b b c$

image-20201106204012871

如果要用$符号,应该写两个:

上面可看成 $1 $$ $2 $$ $3

出现0次或多次

image-20201106205619292

1000000000000 -> 1000,000,000,000

提示: 把空换成逗号

匹配后面跟着的是1或多个 000 连着的 并且字符串是以他们结尾的 空, 把这个空变成逗号

image-20201106212908999

模板替换

双大括号替换

一定要记得写子表达式

image-20201106213413578

image-20201106213543795

模板替换(重要)

image-20201106213851478

输入框不让输入 空格

image-20201107102956770

至少6位

image-20201107104535753

验证邮箱

image-20201107110730232

注意点

语法当中存在的符号一定要对它进行转义, 不然会报语法错误

文章来源: segmentfault.com,作者:dramaqueen,版权归原作者所有,如需转载,请联系作者。

原文链接:segmentfault.com/a/1190000039347778

(完)