【ECMAScript】RegExp对象属性和方法梳理和总结(第一篇)

1. 前言

        大部分语言都支持正则表达式,它在处理字符串上大有用处,但由于平时使用次数少,容易忘记,特此梳理和总结如下。

1. 正则表达式初始化方式(2种)
/**
* @param { string } pattern 正则表达式的模式
* @param { 'i'|'g'|'m' } modifiers 修饰符 i-忽略大小写 g-执行全局匹配 g-多行匹配
*/
let reg_1 = new RegExp(pattern, modifiers)

let reg_2 = /pattern/modifiers

// 示例:匹配由1个至多个数字、字母及下划线组成的字符串
reg_1 = new RegExp('\\w+');
reg_2 = new /\w+/ 
2. 修饰符
修饰符说明示例
i对大小写不敏感的匹配/AbC/i.test('abc')
g全局匹配,即查找出所有匹配
m多行匹配 /pattern/m
3.  方括号表达式

        字符组和反字符组。

方括号表达式说明示例

[abc]

[adgk]

查找方括号中的任何字符

注:方括号中的字符算是一个集合,在字符串中找到集合中一个就算匹配

/abc/.test('aaa')

得到true

[^abc]

[^adgk]

[^A-Z]

查找任何不在方括号中的字符

注:和[abc]相反,在字符串中找到不是集合或范围中一个字符就算匹配

/[^0-9A-z]/.test('aaa111')

得到false

[0-9]

[A-Z]

[A-z]

[a-z]

查找任何从某个字符到某个字符的字符

注:-表示范围,从某个字符到某个字符,在字符串中找到范围中一个就算匹配

/[0-9A-z]/.test('aaa111')

得到true

(red|blue|green)

查找任何指定的选项

注:多项中的某一项匹配了就算匹配,此处用到圆括号(),如果是方括号,含义就不一样了。

[red|blue|green],表示的是red|blue|green这么多字符中的某一个匹配就算匹配

圆括号的分组作用后续细化

/(red|blue|green)/.test('blue1red')

得到true

4. 特殊字符(元字符)

        加了反斜杠\,做了转义。

特殊字符

说明示例
.

查找单个字符,除了换行\n和行结束符\0

<略>
\w

查找数字、字母及下划线,即[0-9a-zA-Z_]的简写形式

注:w是word-单词的首字母

<略>
\W

查找非单词字符,和\w相反,查找非数字、字母、下划线,即[^0-9a-zA-Z_]的简写形式

<略>
\d

查找数字字符

注:d是digit-数字的首字母

<略>
\D查找非数字字符<略>
\s查找空白字符<略>
\S查找非空白字符<略>
\b

\b匹配单词边界,具体就是\w和\W之间的位置,也包括\w和^之间的位置,也包括\w和$之间的位置

注:b是boundary-边界的首字母

<略>
\B

\B匹配非单词边界,具体就是\w与\w、\W与\W、^与\W,\W与$之间的位置

<略>
\0查找NULL字符<略>
\n查找换行符<略>
\f查找换页符<略>
\r查找回车符<略>
\t查找制表符<略>
\v查找垂直制表符<略>
\xxx

查找以八进制数 xxx 规定的字符

注:处理3个8进制数字表示编码的字符

/\101/.test('A')
\xdd

查找以十六进制数 dd 规定的字符

注:处理2个16进制数字表示编码的字符

/\x41/.test('A')

\uxxxx

查找以十六进制数 xxxx 规定的 Unicode 字符

注:处理2个字节表示的字符,不足2字节,高2字节补0,\uxxxx中u需要小写

/\u6211/.test(‘我’)

/\u0041/.test('A')

5. 量词
  • \b-单词的边界位置
  • \B非单词的边界位置
  • ^字符串起始位置
  • $字符串结束位置
  • ?=n表示n前面的位置
  • ?!n表示不是n前面的位置
量词说明示例
n+

匹配一个至多个n的字符串

区间 [1, +∞)

/[abc]+/.test('acacb')

得到true

n*

匹配零个至多个n的字符串

区间 [0, +∞)

/[abc]*/.test('')

得到true

n?

匹配零个或一个n的字符串

区间 [0, 1]

/[abc]?d?/

可以匹配a,b,c,d,ad,bd,cd

n{X}

匹配X个n的字符串

区间 [ X ]

/[abc]{2}/

可以匹配aa,bb,cc,ab,ba,ac,ca,bc,cb

n{X, }

匹配X个至多个n的字符串

区间 [X, +∞)

<略>
n{X, Y}

匹配X个至多个n的字符串

区间 [X, Y]

<略>
n{X, Y}?量词后面加个问号就能实现惰性匹配,能匹配到X个就知足<略>
n$

匹配任何结尾为 n 的字符串

$匹配字符串结尾的位置。

/[123]$/

匹配以1或2或3结尾的字符串

^n

匹配任何开头为 n 的字符串

注:注意和方括号中[^abc]的区别。

^匹配字符串开头的位置。

/^[123]/

匹配以1或2或3开头的字符串

?=n

匹配任何其后紧接指定字符串 n 的字符串

/ove (?=myself)/.test('i love myself')

匹配后面接myself的子串'ove '

?!n

匹配任何其后没有紧接指定字符串 n 的字符串

注:和?=n相反

<略>
6. RegExp原型方法
方法说明示例
RegExp.prototype.test

功能:检索字符串中指定的值

输入:string

输出:boolean,即true | false

/abc/.test('abc')

RegExp.prototype.exec

功能:检索字符串中指定的值,返回找到的子串及其位置

输入:string

输出:Array | null

[

0: string 匹配到子串

index: number 匹配到子串索引

input: string, 源字符串

length: number,数组长度

groups: undefined

]

/abc/.exec('abcabc')
RegExp.prototype.toString

功能:获取正则表达式字符串

输入:无

输出:string

/abc/.toString()

得到‘/abc/’

7. RegExp对象属性
属性说明示例
ignoreCase实例是否设置修饰符i

/abc/i.ignoreCase

得到‘i’

global实例是否设置修饰符g

/abc/g.global

得到‘g’

multiple实例是否设置修饰符m

/abc/m.multiple

得到'm'

constructor实例指向的构造函数

/abc/.constructor

得到RegExp

source实例的匹配模式

/abc/.source

得到‘abc’

lastIndex

RegExp.prototype.test和RegExp.prototype.exec下一次的检索起始位置

可读写,开发可以设置,test和exec也会设置,

可以用于连续匹配场景

仅修饰符设置‘g’才可以用

const reg = /abc/;

reg.test('abcabc')

reg.lastIndex

8. 使用正则表达式的String原型方法
方法说明示例
String.prototype.search(searchVal)

功能:检索匹配searchVal的位置索引(此处修饰符g无效)

输入:RegExp | string

输出:number | -1

let str = 'My dream and her dream'

let index = str.search(/dream/g)

String.prototype.match(regexp)

功能:根据regexp匹配子串,将所有匹配的字符串构成数组返回,修饰符g返回所有匹配子串数组,不加修饰符g,和RegExp.prototype.exec()方法返回结果一样

输入:RegExp | string

输出:Array<string> | null

'afbgc'.match(/[abc]+/g)

String.prototype.replace(searchVal, newVal)

功能:用newVal替换匹配的子串(替换所以匹配的,正则表达式需要加修饰符g)

输入:RegExp | string

输出:string

let str = 'My dream and her dream'

let newStr = str.replace(/dream/g, 'computer')

得到

'My computer and her computer'

String.prototype.split(separator, limit)

功能:根据separator,将字符串拆成字符串数组

输入:RegExp | string

输出:Array<string>

let str = 'My dream and her dream'

let newStr = str.slit(/dream/g)

得到数字

['My ', ' and her ', '']

笔者感觉这篇写正则表达式的文章,很不错,推荐给大家:JS正则表达式完整教程(略长) - 掘金 (juejin.cn)

下一篇:【ECMAScript】String对象属性和方法梳理和总结(第二篇)-CSDN博客

注:以上,如有不合理之处,还请帮忙指出,大家一起交流学习~

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值