了解正则表达式

168 阅读2分钟

这是我参与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
}))