Js:正则表达式及其方法
一、正则表达式的介绍:
1、含义:
正则表达式用来定义一个规则,是
Js
中的一个对象。
2、作用:
① 计算机可以检查一个字符串是否符合规则
② 将字符串中符合规则的内容进行提取
二、正则表达式的创建:
1、 通过构造函数创建:new RegExp(规则, 标识)
① 标识 / 匹配模式:
(1)匹配模式的数据类型:字符串
(2)匹配模式取值:
i:忽略大小写
g:全局匹配模式
var reg = new RegExp('a','i');
consoole.log(reg) // /a/i
② 使用场景:动态创建规则
③ 注意事项:
当使用转义字符(\
)的时候,需要写两个 \\
var reg = new RegExp('\\w','i');
consoole.log(reg) // /\w/i
2、 字面量创建:var 变量 = /规则/标识
var reg = /a/i ;
consoole.log(reg) // /a/i
三、正则表达式的语法:
1、 或
的表示:
① |
:表示整体的或
// 匹配ab或c或de的字符串
let reg = /ab|c|de/;
let str = 'c'
let result = reg.test(str)
console.log(result) // true
② []
:表示字符集 – 只要有某个字符就行
// 匹配任意包含a或b或c或d的字符串
let reg = /[abcd]/;
let str = 'cd'
let result = reg.test(str)
console.log(result) // true
2、 任意的小写字母:
① [a-z]
:
// 匹配任意包含a到z之间的内容
let reg = /[a-z]/;
let str = 'c'
let result = reg.test(str)
console.log(result) // true
② /[a-z]/i
:
// 匹配任意忽略大小写的包含a到z之间的内容
let reg = /[a-z]/i;
let str = 'H'
let result = reg.test(str)
console.log(result) // true
2、 任意的大写字母:
① [A-Z]
:
// 匹配任意包含A到Z之间的内容
let reg = /[A-Z]/;
let str = 'c'
let result = reg.test(str)
console.log(result) // false
② /[A-Z]/i
:
// 匹配任意忽略大小写的包含A到Z之间的内容
let reg = /[A-Z]/i;
let str = 'c'
let result = reg.test(str)
console.log(result) // true
3、 任意字母:[a-zA-Z]
// 匹配任意字母
let reg = /[a-zA-Z]/;
let str = 'cfff'
let result = reg.test(str)
console.log(result) // true
4、任意数字:
① [0-9]
:
// 匹配任意数字
let reg = /[0-9]/;
let str = '123'
let result = reg.test(str)
console.log(result) // true
② \d
:
// 匹配任意除了0到9之外的内容
let reg = /\d/;
let str = 'cd123d'
let result = reg.test(str)
console.log(result) // true
5、除了XXX:[^ ]
// 匹配任意除了包含a或b之外的内容
let reg = /^[abb]/;
let str = 'bc'
let result = reg.test(str)
console.log(result) // true
6、匹配除了数字之外的:
① [^0-9]
:
// 匹配任意除了0到9之外的内容
let reg = /[^0-9]/;
let str = '111ccc'
let result = reg.test(str)
console.log(result) // true
② \D
:
// 匹配任意除了0到9之外的内容
let reg = /\D/;
let str = '111ccc'
let result = reg.test(str)
console.log(result) // true
7、除了换行符之外的任意字符:.
// 匹配除了换行符之外的任意字符
let reg = /./;
let str = '\n'
let result = reg.test(str)
console.log(result) // false
8、转义字符:\
// 匹配.
let reg = /\./;
let str = 'ab.c'
let result = reg.test(str)
console.log(result) // true
9、匹配任意的字母、数字、下划线:
① \w
:
let reg = /\w/;
let str = '&111&'
let result = reg.test(str)
console.log(result) // true
② [A-z0-9_]
:
let reg = /[A-z0-9_]/;
let str = '&111&'
let result = reg.test(str)
console.log(result) // true
10、匹配除了任意的字母、数字、下划线之外的任意内容:
① \W
:
let reg = /\W/;
let str = '11sA!'
let result = reg.test(str)
console.log(result) // true
② [^A-z0-9_]
:
let reg = /[^A-z0-9_]/;
let str = '11sA!'
let result = reg.test(str)
console.log(result) // true
11、匹配空格:\s
let reg = /\s/;
let str = ' 11sA '
let result = reg.test(str)
console.log(result) // true
12、除了空格之外的任意内容:\S
let reg = /\S/;
let str = ' aa'
let result = reg.test(str)
console.log(result) // true
13、单词边界的任意内容:\b
① 单词边界含义:单词左右两边和非单词的位置,同类无界。
② 作用:用来精准的匹配单词
let reg = /\bchild\b/;
let str = 'children'
let result = reg.test(str)
console.log(result) // false
14、除了单词边界之外的任意内容:\B
① 非单词边界含义:单词内部的字符之间的位置。
② 使用:
// 非单词边界处的“cat”
let reg = /\Bcat\B/g;
let str = "The cat scattered his food all over the catacomb.";
let result = str.match(reg)
console.log(result) // ['cat']
15、匹配开头:^
// 匹配当前内容是否以a开头
let reg = /^a/;
let str = ' aa'
let result = reg.test(str)
console.log(result) // false
16、匹配结尾:$
// 匹配当前内容是否以a结尾
let reg = /a$/;
let str = ' aa'
let result = reg.test(str)
console.log(result) // true
17、完全匹配:^ $
要求字符串和正则完全匹配
let reg = /^a$/;
let str = "a";
let result = reg.test(str)
console.log(result) // true
四、量词:设置一个内容出现的次数
量词只对它前边的一个内容起作用
1、出现m次:{m}
// 匹配是否有出现3次的a
let reg = /a{3}/;
let str = "aaa123";
let result = reg.test(str)
console.log(result) // true
// 匹配是否有只出现3次的a
let reg = /^a{3}$/;
let str = "aaaa";
let result = reg.test(str)
console.log(result) // false
// 匹配出现3次的字符,字符取值a到z
let reg = /[a-z]{3}/;
let str = "acd";
let result = reg.test(str)
console.log(result) // true
// 匹配出现3次的字符串ab
let reg = /(ab){3}/;
let str = "acd";
let result = reg.test(str)
console.log(result) // false
2、 出现m-n次:{m,n}
// 匹配出现1到3次的a
let reg = /a{1,3}/;
let str = "ahhh";
let result = reg.test(str)
console.log(result) // true
3、 出现m次以上:{m,}
// 匹配出现3次以上的a
let reg = /a{3,}/;
let str = "aa123";
let result = reg.test(str)
console.log(result) // false
4、 至少出现一次:
① +
:
// 匹配至少出现1次的a
let reg = /a+/;
let str = "aaa123";
let result = reg.test(str)
console.log(result) // true
② {1,}
:
// 匹配至少出现1次的a
let reg = /a{1,}/;
let str = "aaa123";
let result = reg.test(str)
console.log(result) // true
5、出现0次或者多次(任意次数):
① *
:
// 匹配出现0次或者多次的a
let reg = /a*/;
let str = "123";
let result = reg.test(str)
console.log(result) // true
② {0,}
:
// 匹配出现0次或者多次的a
let reg = /a{0,}/;
let str = "123";
let result = reg.test(str)
console.log(result) // true
6、出现0次或者1次:
① ?
:
// 匹配出现0次或者1次的a
let reg = /a?/;
let str = "b123";
let result = reg.test(str)
console.log(result) // false
② {0,1}
:
// 匹配出现0次或者1次的a
let reg = /a{0,1}/;
let str = "b123";
let result = reg.test(str)
console.log(result) // false
五、正则表达式的方法:
1、 通过正则表达式检查一个字符串是否符合规则:
① 正则表达式.test(字符串)
:符合返回 true
// 判断当前字符串是否含有 a
let reg = new RegExp('a', 'i');
let str = 'abc';
let result = reg.test(str);
console.log(result) // true
2、将一个字符串拆分为一个数组:字符串.split(正则表达式)
:
全局匹配
// 根据任意字母拆分字符串
let reg = /[A-z]/;
let str = 'a1b2c3d4';
let result = str.split(reg)
console.log(result) // ['', '1', '2', '3', '4']
3、搜索字符串中是否含有指定内容:字符串.search(正则表达式)
:
如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到,则返回 -1
只会查找第一个,即使设置了全局匹配,也没有用
// 查找第一个a加b或或f加c组成的内容
let reg = /a[bef]c/;
let str = 'hello abc hello aec afc';
let result = str.search(reg)
console.log(result) // 6
4、将符合条件的内容提取出来:
① 字符串.match(正则表达式)
:
默认情况下,match只会找到第一个符合要求的内容,将匹配到的内容封装到一个数组中返回。
设置正则表达式的全局匹配模式,这样会匹配所有的内容
// 不区分大小写,全局匹配所有字母
let reg = /[A-z]/ig;
let str = 'a1b2c3d4ABCD';
let result = str.match(reg)
console.log(result) // ['a', 'b', 'c', 'd', 'A', 'B', 'C', 'D']
② 正则表达式.exec(字符串)
:
// 匹配axc格式的内容
let reg = /a[a-z]c/;
let str = "abcadcaecacc";
let result = reg.exec(str)
console.log(result) // ['abc', index: 0, input: 'abcadcaecacc', groups: undefined]
5、内容替换:字符串.replace(正则表达式, 新内容)
默认只会替换匹配到的第一个内容
// 将匹配到的第一个a替换为(●ˇ∀ˇ●)
let reg = /a/;
let str = 'a1b2a3d4ABaD';
let result = str.replace(reg,'(●ˇ∀ˇ●)')
console.log(result) // (●ˇ∀ˇ●)1b2a3d4ABaD
六、 常用的正则:
1、去除开头和结尾的空格:
var reg = /^\s+|\s+$/g
var str = " hell o "
str.replace(reg,"") // 结果:hell o
2、输入框中只允许输入正数(包含小数):
onkeyup="value= (value.replace(/[^.0-9]/,'').replace(/.*?(\d+\.?\d*).*/g,'$1')).replace(/^0+/,'0')"