正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular
Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本
test/match
正则表达式test() 返回是否满足我的条件,T,F
例:
let re =/a/;
let str = "abc";
console.log(re.test(str));//true;
let re1 new RegExp("a");
let str1 = "abc";
console.log(re1.test(str1));//true
字符串match() 返回满足条件的内容
例:
let re = /a/;
let str ="abc";
console.log(str.match(re));//"a"
let re1 = new RegExp("a");
let str1 = "abc";
console.log(str1.match(re1));//"a"
g:global 全局
输出所有满足条件的内容,如果不加g,则只输出第一个满足的内容
例:
let re1 =new RegExp("ab","g");
let str1 = "ababe";
console.log(str1.match(re1));//"ab" "ab"
大小写是否敏感
i:是否区分大小写,如果写i就不区分,不写i就区分大小写
例:
let re1 =new RegExp("ab","g");
let str1 = "abABe";
console.log(str1.match(re1));//"ab"
let re1 = new RegExp("ab","ig");
let str1 = "abABe";
console.log(str1.match(re1));//"ab""AB"
m:多行匹配
查找的字符串有换行符(\n)
例:返回每行以a开头的内容
let re = /^a/gm;
let str = "abc\nabc";
console.log(str.match(re));//"a" "a"
例:
返回匹配以“字母”开头的内容
let re = /^[A-z]/g;
let str1 = "abac";
例:返回匹配以“数字开头的内容”
let re =/^[0-9]/gi;
let str1 ="ABcd"
console.log(str1.test(re));//null
str1 = "0ABcd"
console.log(str1.test(re));//"0"
例:
返回以数字结尾的内容
let re = /[0-9]$/gi;
let str1 = ""ABcd";
console.log(str1.macth(re));//null
str1 ="0ABcd1"
console.log(str1.macth(re));//1
[]表达式
let re = /[ab][c]/g;
let str = "abcd";
console.log(str.match(re));//"bc"
//匹配3个字符,第1位内容是a或者b 第2位内容必须是c或者d 第3位必须是d
let re =/[ab][cd][d]/g;
let str = "abcd";
console.log(str.match(re));//"bcd"
如果在[]里面(在表达式中)加了^就代表“非”的意思
let re =/[^ab]/g;
let str ="abcd";
console.log(str.match(re));//null
匹配3位字符,第1位不是a或者b 第2位是c或者d
let re =/[^ab][cd][d]/g;
let str ="abcd";
console.log(str.match(re));//ecd
{}
{n} n取值量词 量词范围:0到正无穷
let re =/[1][0-9]{10}/g;
str = "18888888888";
console.log(str.match(re));//18888888888
{n,m} n,m取值量词
例:
{2,3}匹配满足2或3个的内容
【n?m;】
功能:查找的是n,满足条件后,只输出n,m是查找a的条件,m不会输出
let str = "abcdefg";
let re = /a(?=b)/g;
console.log(str.match(re));//"a"
【n?!m;】
功能:查找的是n,满足条件后,只输出n,m是查找a的条件,即n后面必须不是m,并且m不会输出
let str = "abcdefg";
let re = /a(?!b)/g;
console.log(str.match(re));//"a"
贪婪模式:
会进行最大值的匹配,知道不满足为止。在进行最小值的匹配。
{n,}表示最少n个,最大到正无穷。
+表示{0,}
let re = /\d+/g;
str ="23ia578234sdpj1f";
console.log(str.match(re));
//'23', "578234", "1"
*表示{0,}
let re = /\d*/g;
str ="23ia";
console.log(str.match(re));
//'23', '' , '' , ''
注:在匹配的过程中,会有一个逻辑位置,即字符串的最后一个字符串的后面的位置
上例中a后面的位置,就是逻辑位置
非贪婪模式(慵懒模式)正向预查、正向断言
格式:在量词后面加一个问号。
功能:能少则少,不会再向多匹配
例1:
let str ="10000000000";
let re = /\d+?/g;
//等价于取两个数字,即/\d{2}/g;
console.log(str.match(re));
例2:
let str = "100000000000";
let re = /\d+?/g;
//等价于取一个数字,因为,+取值为一到正无穷。即/\d{1}/g;
console.log(str.match(re));//每一个数字
例:
let str = "10000000000";
let re = /\d*?/g;
//等价于取0个数字,因为,*取值为0到正无穷。即/\d{0}/g;
console.log(str.match(re));//多个空格
?表示{0,1}
let re = /\d?/g;
str = "23ia";
console.log(str.match(re));
//"2", "3", " ", " ", " "
元字符,简记
\d 代表数字
\D 代表非数字
例:
let re = /[\d]/g;
str = "q2p";
console.log(str.match(re));//"2"
\w [a=z A-Z 0-9 _]
\W ^\w
例:
let re = /[\w]/g;
str = "12345qwerty;";
console.log(str.match(re));//";"
边界符
\b 判断字符串是否以XX开头,或者以XX结尾
\B ^
例:
re = /\bac/g;
str = "acbacdebaacac";
console.log(str.match(re));//ac
\s 空白字符 空格 回车 tab(缩进)
" " \r \t(制表符)
\S ^\s
如果表达式中写的内容是\d\D或\s\S(不仅是d和s)的话。
就是进行互补,最终会匹配所有可输入字符。
【注:特点】
let str ="abcaabc";
let re = /^abc$/g;
如果判断内容既是开始,又是结束。
console.log(str.match(re));//null
正确的:
let str ="abc";
let re = /^abc$/g;
如果判断内容既是开始,又是结束。
console.log(str.match(re));//null
()
1、可以设置多个条件。(一真为真);
let str = "abcd";
let re = /(abc|bcd)/g;
console.log(str.match(re));
2、反向引用获取内容
【正则表达式的属性】
re.global // 是否开放全局查找 //false
re.multiline //是否开放多行匹配 //false
re.ignoreCase// 是否开放大小写不敏感 //true
re.lastIndex
re.source //表达式里的内容 //\d
【正则表达式的方法】
re.test(); //返回字符串是否满足表达式内容。
re.exec(); //返回字符串中满足表达式的下标。
【lastindex属性与exec()配套使用】
表示查找下次匹配的时候光标的开始位置
如果已经查找到符合内容的位置,
则lastindex就会在符合内容的后一位
let str = "ab1c1eeeeabeeeeabee";
let re = /ab/g;
console.log(re.lastindex); //0;
console.log(exec(str)); //0;
由于lastindex是一个属性,我们可以进行修改。
修改的是查找的起始位置。
console.log(ree.lastindex); //2
re.lastindex = 0;
console.log(re.exec(str)); //0
console.log(re.lastindex); //2
console.log(re.exec(str)); //9
字符串方法:
【search】(查找下标所在位置)
let str = "123abc1234123"
let re = /a/g;
console.log(str.search(re));//3
【replace】替换
替换字符串里的字符 replace(a,b);
a表示被替换的字符
b表示替换后的字符
let str = "Jg445g";
let re = /g/g;表示替换的字符是g
console.log(str.replace(re,"G"));表示把替换的字符g换成G;