脑图
目录
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
应该重复出现m
到n
次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
:表示a
或b
[^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)
- 第一个参数:被替换的内容,可以接受一个正则表达式
- 第二个参数:新内容
一般指替换一个,详情点击