JavaScript 正则表达式

一、创建正则表达式

正则表达式(regular expression简称reg)

—正则表达式用来定义一个规则

—通过这个规则计算机可以检查一个字符串是否符合规则,或者将字符串中符合规则的内容提取出来

—正则表达式也是JS中的一个对象,所以要使用正则表达式,需要先创建正则表达式的对象

创建方法:

1、 new RegExp( ) 可以接收两个参数(字符串):1.正则表达式 a(专业名称为 模式 ,即正则表达式的规则)2.匹配模式 i(专业名称为 标识 )

let reg = new RegExp (“a”,“i”) // 通过构造函数来创建一个正则表达式的对象,好处是函数中的 a 可以用来传变量,即可以动态地生成正则表达式

2、 reg = /a/i

// 使用字面量来创建正则表达式,该方法只能传入固定的字面量 a : /正则/匹配模式

ps: 两种方法在控制台输出的结果都是 /a/i

注意: 在函数字符串向正则表达式转义时会省略掉一个 \ ,所以要写两个 \ \ ,控制台输出会显示一个 \ 。例如:

reg = new RegExp ( "\ \ w " ) 等价于 reg = / \w / ,结果都是 / \w /

ps: typeof reg 的结果为 ‘object’

举例:

//通过正则表达式检查一个字符串是否符合规则
reg = new RegExp("a") // /a/表示检查一个字符串中 是否含有a
let str = "a"
//.test()意思是用前面的reg测试检查后面传入的参数str是否相符,若相符则返回 true,若不一致则返回false
let result = reg.test(str) //true
result = reg.test("b") //false
result = reg.test("abc") //true
result = reg.test("bcabc") //true
console.log(result);

ps: 这两者效果一样:reg = /a/ 与 reg = new RegExp(“a”)

二、正则表达式的语法

1、 在正则表达式中大部分字符都可以直接写

let re = /ab/  // ab必须连在一起且前后位置不变
let result = re.test('ab-c') // true
let result = re.test('acb') // false

2、 | 在正则表达式中表示 或,而且符号前后为整体

let re = /abc|bcd/
let result = re.test('ab') // false
let reesulr = re.test('bcd') // true

3、[ ] 表示 或(字符集)

/ [ab] / 表示 a 或 b

/ [a-z] / 表示任意小写字母

/ [A-Z] / 表示任意的大写字母

/ [a-zA-Z] / 表示任意的字母,这种情况等价于 / [a-z] /i ,匹配模式 i 表示忽略大小写

/ [0-9] / 表示任意数字

4、[^] 表示除了

[^a-z] 表示除了小写字母,即有无小写字母以外的东西

5、[.] 表示除了换行符(\n ,\r)以外的任意字符

ps: 表示任意字符 .

6、 在正则表达式中使用 \ 作为转义字符

re = /\./ //表示 . 
let result = re.test('.') //true
console.log(result)

7、 其他的字符集

\w 表示任意的单词字符 等价于 [ A-Za-z0-9_ ]

\W 表示除了单词字符 等价于 [ ^A-Za-z0-9_ ]

\d 表示任意数字 [0-9]

\D 表示除了数字 [ ^ 0-9 ]

\s 表示空格

\S 表示除了空格

\b 表示单词边界

\B 表示除了单词边界

8、 开头和结尾

^ 表示字符串的开头 $ 表示字符串的结尾

re = /^a/ //匹配在开始位置的a
let result = re.test('abc') //true
let result = re.test('ba') //false
console.log(result)
re = /a$/ //匹配结束位置的a
let result = re.test('a') //true
let result = re.test('abc') //false
re = /^a$/ //只匹配字母a,完全匹配,要求字符串必须和正则完全一致
let result = re.test('aaa') //false
let result = re.test('a') //true
console.log(result)

三、量词

1、 {m} 表示正好 m 个(有就行)

let re = /a{3}/ // 若改为/^a{3}$/,则结果为false
let result = re.test('aaaa') //true
console.log(result)

ps: {m} 只对离它最近的前一个字符有效,可以用 ( ) 表示多个字符的整体

let re = /^(ab){3}$/
let result = re.test('ababab') //true
let result = re.test('aab') //false
console.log(result)
let re = /^[a-z]{3}$/ //表示连续三个小写字母
let result = re.test('ababab') //false
let result = re.test('aab') //false
console.log(result)

2、 { m, } 表示至少 m 个

3、 { m,n } 表示 m 到 n 个3

4、 + 表示一个以上,相当于 {1,}

5、 * 表示任意数量的字符,有没有都行

6、 ?表示字符出现0到1次

四、获取内容

.exec( ) 表示获取字符串中符合正则表达式的内容

let str = "abcaecafcacc"
//提取出str中符合axc格式的内容
let re = /a[a-z]c/i // 用i只匹配第一个
let result = re.exec(str) //['abc',index:0,input:'abcaecafcacc',group:undifined]
console.log(result)
let str = "abcaecafcacc"
//提取出str中符合axc格式的内容
let re = /a[a-z]c/ig  // g表示全局匹配,但是一次只匹配一个 
let result = re.exec(str) //['abc',index:0,input:'abcaecafcacc',groups:undifined]
re.exec(str) //['aec',index:3,input:'abcaecafcacc',groups:undifined]  第二次匹配到第二个结果
re.exec(str) //['afc',index:6,input:'abcaecafcacc',groups:undifined]  第三次匹配到第三个结果
re.exec(str) //['acc',index:9,input:'abcaecafcacc',groups:undifined]  第四次匹配到第四个结果
re.exec(str) //null  表示该字符串已经匹配完成 
console.log(result)

分组匹配,加括号,显示匹配结果时遵循由前到后、由外层括号到内层括号显示结果

let re = /a(([a-z])c)/ig 
let result = re.exec(str) //['abc','bc','b',index:0,input:'abcaecafcacc',groups:undifined]
result[0] //'abc' 表示整体的匹配结果
result[1] //'bc' 表示第一个括号(第一组)的匹配结果
result[2] //'b' 表示第二个括号(第二组)的匹配结果
console.log(result)

可以用循环语句遍历输出匹配结果

let re = /a(([a-z])c)/ig 
let result = re.exec(str) 
while(result){ //表示result有值
    console.log(result[0],result[1],result[2])
    result = re.exec(str)
}
/*结果为 abc bc b
		aec ec e
		afc fc f
		acc cc c*/

五、字符串

str.split(“@”) 表示把字符串str根据@位置拆分并获取结果

let str = "孙悟空abc猪八戒adc沙和尚"
let result = str.split(/a[bd]c/) // ['孙悟空','猪八戒','沙和尚']
console.log(result)

.search( ) 可以搜索符合正则表达式的内容第一次在字符串中出现的位置,括号内可以是正则表达式。与 indexof( ) 不同,indexof 后的括号内只能传字符串。search 只能用来搜索而不能获取

.replace( “ ”,“ ” ) 根据正则表达式替换字符串中的指定内容。用后面的替换前面的,前面的内容可以传正则表达式

.match( ) 根据正则表达式去匹配字符串中符合要求的内容。无需遍历多次取结果,一次就能全取完,但不能分组匹配

.matchAll( ) 根据正则表达式去匹配字符串中符合要求的内容(必须设置g 全局匹配)。它返回的是一个迭代器(for、of)

let str
let result = str.matchAll(/ /g)
for(let item of result){
    console.log(item) //item就是匹配到的结果,可以是多个结果
}

本篇笔记根据B站课程所作 JavaScript核心基础_讲师(李立超)_JS教程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值