正则表达式

一、 语法

//1.直接写表达式
var reg1 = /abc/
//2.创建实列化对象
var reg2 = new RegExp(`abc`)
var reg2 = new RegExp(/abc/)

// 例子
var str = 'helloL'
console.log(str.replace(/l/g, 'L'))

var reg1 = new RegExp('l', 'gi') //正则对象

console.log(str.replace(reg1, 'w'))

二、 标志

//g-->全局
//i-->忽略大小写
//m-->多行  u-->Unicode  y-->粘性匹配
var reg1 = /abc/g
var reg2 = new RegExp(`abc`, 'gi')

三、 方法

1. test()

匹配内容是否存在字符串中,返回 true/false

var str2 = 'hello world'
var reg2 = /l/g
//正则.test(匹配字符串)  判断是否存在,返回true/false
console.log(reg2.test(str2))
// true

2. exec()

检索字符串中指定的值。返回找到的值,并确定其位置。
//exec
//返回值:如果存在,返回数组;如果不存在,返回null
//返回数组:包含匹配出来的字符串片段、index表示匹配的索引位置、group、input表示原本的字符串
//正则对象.lastIndex 表示匹配后的更新的 下一次匹配索引起始位置、如果匹配失败,lastIndex归零
var str2 = 'hello world'
var reg2 = /l/g
reg2.exec(str2)
// ["l", index: 2, input: "hello world", groups: undefined]
reg2.exec(str2)
// ["l", index: 3, input: "hello world", groups: undefined]
reg2.exec(str2)
// ["l", index: 9, input: "hello world", groups: undefined]
reg2.exec(str2)
// null

3. match()

/*
		字符串.match(正则)
		返回 
		1. 正则不包含标志g,结果和exec一致
		2. 包含标志g,返回匹配内容的数组
		3. 匹配失败返回null

		*/
var str3 = 'hello world'

str3.match(/a/g)
// null
str3.match(/l/g)
// ["l", "l", "l"]

实例

var str4 = 'yes make my day'
//1  . 表示任意字符
var reg4 = /.y/
console.log('.', reg4.exec(str4))
// ["my", index: 9, input: "yes make my day", groups: undefined]

//2  \d 或 [0-9]  数字    []表示匹配一个字符可能情况 , - 表示范围
var str5 = 'qwe1058asd'
var reg5 = /[468]/
console.log('\\d', reg5.exec(str5))

//3 \D 非数字
var reg5 = /\D/
console.log('\\D', reg5.exec(str5))

//4 \w 或 [A-Za-z0-9_] 数字+大小写+下划线
var reg6 = /[a-z]/
console.log('\\w', reg6.exec(str5))

//5 \s  空字符
var str7 = 'hello world javascript'
var reg7 = /\s[a-z]/
console.log('\\s', reg7.exec(str7))

//6 \uXXXX unicode编码   XXXX表示16进制编码
var str8 = '哇哈?\\'
var reg8 = /[\u4E00-\u9FA5]\?\\/ //基本汉字范围
console.log('\\u', reg8.exec(str8))

//7 [xyz]  一个字符里面可以是xyz任意一个
//8 [^xyz]  一个字符里面除了xyz以外的任意字符

var str9 = 'apple Apple'
var reg9 = /^[A-Z]pple/
console.log('^开头', reg9.exec(str9))
var reg9 = /[A-Z]pple$/
console.log('$结尾', reg9.exec(str9))

var reg9 = /^a.*e$/
console.log('开头结尾', reg9.exec(str9))

var reg9 = /le\b/
console.log('零宽', reg9.exec(str9))

//9 () 表示捕获内容 在exec方法当中会单独存放()里面的内容放在下标当中
var str10 = 'today is good day'
var reg10 = /[a-z](day) (is)/
console.log('括号()', reg10.exec(str10))

//10 \n 引用前面小括号捕获的结果 ,n表示第几个括号
var str11 = 'ha!ha?ha%ha!'
var reg11 = /ha(\!)ha(\?)ha(\%)ha\1/
console.log('\\n', reg11.exec(str11))

//11 ?:  不捕获
var str12 = 'today is good day'
var reg12 = /[a-z][a-z](?:day)/
console.log('?:', reg12.exec(str12))

//12 {n}  刚好发生了n次
var str13 = 'qwertyuiopasqw'
var reg13 = /[a-z]{8,10}/
console.log('{}', reg13.exec(str13))

// x|y 或
var str14 = 'green apple'
var reg14 = /(green|red)/
console.log('|', reg14.exec(str14))

//13 #ff6600
var str15 = '#ff6600'
var reg15 = /#(?=[a-f0-9]{6})/
console.log('(?=)', reg15.exec(str15))
Last Updated:
Contributors: zerojs