正则表达式详解

脑图
在这里插入图片描述

1 创建


正则表达式用来对字符串做匹配,提取,替换的等的处理操作

1.1 构造函数


使用 new RegExp('正则表达式','匹配模式')来创建一个正则表达式,其中匹配模式包括

  • i忽略大小写
  • g全局匹配,并不是在找到第一个后停下
  • m:多行匹配

实例

const str = "Hello World,hello better life"
var reg = new RegExp("hello","gi") // 注意都是字符串
console.log(str.match(reg)) //  ["Hello", "hello"]

match方法是字符串匹配的一种方法,一会我们会讲解

1.2 字面量


使用/正则表达式/匹配模式,来创建一个正则表达式,功能与上面相同

实例

const str = "Hello World,hello better life"
var reg = /hello/ig   // 注意不是字符串
console.log(str.match(reg)) //  ["Hello", "hello"]

2 规则


2.1 转义字符


.表示任意字符,如果我们想要在正则表达式中输入.,就需要使用\ + 符号,比如我们想要使用.,需要输入\.

实例

/* 我们来匹配 .hello 这个子串 */
const str = "Hello World, .hello better life"
var reg = /\.hello/  // 注意不是字符串
console.log(str.match(reg)) // [".hello", index: 13, input: "Hello World, .hello better life"]

2.2 位置与数量


2.2.1 位置


使用^表示开始,使用$表示结尾

  • /^a/表示以a开头
  • /a$/表示以a结尾
  • /^aS/表示一个a
  • /^a|a$/表示以a开头或者以a结尾

例题1

/* 我们在hello的开口和结尾 ,加上 笑脸 */
const result = "hello".replace(/^|$/g, '^_^');
console.log(result) // ^_^hello^_^

例题2

多行匹配会分段

/* 我们在hello的开口和结尾 ,加上 笑脸 */
const result = "i\n love\n you".replace(/^|$/gm, '^_^');
console.log(result)

输出

在这里插入图片描述

2.2.2 量词


通用

使用{数量}来表示重复的数量

  • ab{3},表示让b重复3次abbb
  • ab{m,n},表示b应该重复出现mn
  • ab{m,},表示b应该出现m次以上
  • (ab){3},表示ab重复出现3次ababab

例题

const b2 = 'abb'
const b3 = 'abbb'
const b4 = 'abbbb'
const ab2 = 'abab'
const ab3 = 'ababab'

console.log(/ab{3}/.test(b2)) // false
console.log(/ab{3}/.test(b3)) //true
console.log(/ab{2,3}/.test(b2)) //true
console.log(/ab{2,3}/.test(b3)) //true
console.log(/ab{2,}/.test(b4)) //true
console.log(/(ab){2,}/.test(ab3)) //true
console.log(/(ab){2,}/.test(ab2)) //true

reg.test(str)用来检测字符串是否符合正则表达式,符合返回true

特殊

这里的特殊标记一共分为3中:?/+/*

  • ?:表示出现0次或者1次,相当于{0,1},能匹配a,ab,abb
  • +:表示出现1次以上,相当于{1,},能匹配``ab,abb`
  • *表示出现0次以上(可有可无),相当于{0,},能匹配a,ab,abb

2.3 类型


2.3.1 字母与数字


[]表示任意一个的意思

  • [0-9]:表示任意的数字
  • [a-z]:表示任意的小写字母
  • [A-z]:表示任意字母
  • [ab]= a|b:表示ab
  • [^ab]表示除了ab以外的

例题

let reg = /a[bcd]e/ // 可以匹配 abe,ace,ade,但不能匹配abce等
console.log(reg.test('ade'))// true
reg = /[^ab]/
console.log(reg.test('ab')) //false
console.log(reg.test('abc')) //true
reg = /[^0-9]/
console.log(reg.test('2'))//false
console.log(reg.test('a1'))//true

2.3.2 特殊的字母


常用的有wdsb(我的SB),其中大写表示排除

  • W任意的字母、_、数字,\W表示排除,\w表示匹配,当三者一起考虑的时候才会使用
  • D表示任意的数字,\D表示排除数字,\d表示匹配任意的数字
  • S表示空格,\S表示排除空格,\s表示匹配数字
  • B表示单词边界,\B表示排除单词边界,\b表示单词编辑

例题

/* 检查以恶搞字符串中是否含有单词 world */
const str1 = 'helloworld'
const str2 = 'hello world'

const reg = /\bworld\b/ // 如果单词之间有空格的话,会识别空格
console.log(reg.test(str1)) // false
console.log(reg.test(str2)) //true

/* 去除字符串开头和结尾的空格 */
const str3 = '    hello world     '
console.log(str3.replace(/^\s*|\s*$/,"")) // hello world

3 正则表达式中常用的方法


3.1 reg.test(str)


用来检测一个字符串是否符合正则表达式,符合返回true,不符合返回false

const str = "hello world"
console.log(/^h|d$/.test(str)) // true
console.log(/l{3}/.test(str)) //false

3.2 str.split(reg)


属于字符串的方法,将字符串以某个标志,分割成数组。除了正则表达式外我们还可以传递一个符号,或者一个空的字符串,第二个参数为返回数组的最大长度

例题

var str="How are you doing today?"

document.write(str.split(" ") + "<br />")// 以空格进行拆分
document.write(str.split("") + "<br />")// 每个字母都会拆分,包括空格
document.write(str.split(" ",3) + "<br/>")//以空格拆分,返回的长度为 3
document.write(str.split("",4))// 每个字母都会拆分,返回的长度为4,包括空格

输出

How,are,you,doing,today?
H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
How,are,you
H,o,w,

3.3 str.search(reg)


  • 返回匹配字串的起始索引,如果没有找到匹配的字串,则返回 -1
  • 只会查找第一个,即使设置了全局查找
const str = "Hello World"
console.log(str.search(/world/i)) // 6
console.log(str.search(/world/)) // -1

3.4 str.match(reg)


找到一个或者多个正则表达式的匹配 ,一般加上全局匹配g,如果没有g也返回一个数组,只不过数组第0个元素匹配的文本

var str = "1 plus 2 equal 3"
// 有 g
console.log(str.match(/\d+/g))//["1", "2", "3"]
// 没有 g
console.log(str.match('equal')) //["equal", index: 9, input: "1 plus 2 equal 3"]

3.5 str.replace(reg)


  • 第一个参数:被替换的内容,可以接受一个正则表达式
  • 第二个参数:新内容

一般指替换一个,详情点击

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值