这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战
什么是正则表达式?
菜鸟教程:正则表达式是由一个字符序列形成的搜索模式。
mdn:正则表达式是用于匹配字符串中字符组合的模式
创建RegExp
var pattern = new RegExp(“[bc]at”,”i”)
var pattern = /[bc]at/i;
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m 多行匹配\
let a = /^a/gm
a.match('abcd\na') //["a","a"]
^
放在表达式里,代表非
没在表达式里,代表开头是啥
[ ]
表达式的意思,一个表达式代表一位
()
子表达式,如果有这个,用方法,会返回子表达式的内容进入类数组
/[ab]/
有a或b /[a-z]/ 任意小写 /[A-z]/ 任意字母 /a[bd]c/ 有abc或adc /[ ^ab] / 除了ab /[0-9]/ 任意数字
方法
test(” “)
var reg = /a/g
reg.test('abcd');
匹配则返回true,否则false
exec()
var reg = /a/g;
let str = 'abababab'
reg.exec(str)
console.log(reg.exec(str))//["a",index:0,input:"abababab"]
reg.lastIndex = 0//可以改变下次匹配的位置
//若匹配则返回a,若不匹配则返回null;
let str = "aabb"
let reg = /(\w)\1(\w)\2/
//子表达式进入类数字,有索引,不管有没有加g
console.log(reg.exec(str))//["aabb","a","b",index:0,input:"abababab"]
split() :
可以将一个字符串拆分为一个数组
split(/[A-z]/)
var str = “a1s2d2f3f4g4”;
var result = str.split(/[A-z]/);
console.log(result);//“1,2,2,3,4,4”
search():
搜索是否有指定的内容
如果搜到则返回第一次出现的索引,否则为-1,不能全局
var re = /a/i;
var str = "abcdef";
str.search(re); // 0
match();
可以根据正则表达式,从一个字符串中提取符合条件的内容
默认情况只找一个就停止索引
将匹配到的n内容封装到一个数组中
str = "1a2b3c4d5e6f7"
var result = str.match(/[A-z]/gi); // 1a2b3c4d5e6f7
replace();
可以将字符串中的指定内容替换为新内容
参数:
参数1:被替换的内容
参数2:新的内容
result = replace(”/[A-z]/g“,””);
量词
var reg = /a{3}/; //正好出现三次
{1,3}一次到三次
{3,}三次以上
+:一次或多次
*:零个或多个
?:零个或一个
/^a/开头是a
/a$/结尾是a
.
表示任意字符,除了\r\n
\
表示转义字符
\n
换行
\r
行结束
\t
缩进
手机号
/^1[3-9] [3-9]{9}$/
\w 任意字母数字下划线
/[A-z0-9_]/
\W
\d 任意数字
/[0-9]/\
\D
\s 空白字符 (空格符,回车符,换行符。。。)
/[\t\n\r\v\f]/
\S
\b 单词边界
\B
/^\s | \s$/g
简单使用
匹配aabb
let str = "aaabbb"
//\1表示第一个子表达式的内容,\2表示第二个子表达式的内容
let reg = /(\w)\1\1(\w)\2\2/
str.match(reg)
驼峰命名
let reg = /-(\w)/g
let str = "the-first-name"
console.log(str.replace(reg,($,$1) => {
-f f
-n n
return $1.toUpperCase()
}))
正向预查
let reg = /a(?=b)/g //后面跟着b
let reg = /a(?!b)/g //后面不跟着b
let str = "abaaaaaaaa"
str.match(reg)//"a"
非贪婪匹配
一般都是贪婪匹配
let reg = /a+?/g
let str = "aaaaa"
str.match(reg)//"a","a","a","a","a",
科学计数法
let str = "10000000000"
let reg = /(?=(\B)(\d{3})+$)/g
console.log(str.replace(reg,'.'))
aabb转为bbaa
let reg = /(\w)\1(\w)\2/g
let str = "aabb"
console.log(str.replace(reg,"$2$2$1$1"))
//或者
//第一个参数是匹配到的全部 aabb
//第二个参数是匹配到的第一个子表达式,第三个就是第二个,以此类推
console.log(str.replace(reg,($,$1,$2) => {
return $2+$2+$1+$1
}))