正则表达式定义
-
符合一些规则的字符串,计算机能够识别的‘规则’,这些规则语法被称为正则表达式
-
js中需要创建正则表达式对应的对象,这些对象提供的方法能够按照规则进行校验
-
正则表达式是描述字符串的对象
-
创建正则表达式对象
语法:
var reg = new RegExp(‘规则’ , ‘匹配模式’)
匹配模式:
i:忽略大小写
g:全局匹配
正则对象.test(字符串) true(满足条件) false(不满足条件)
问题:验证邮箱正确与否
分析:
- 输入的邮箱保存在字符串变量中,调用字符串变量的相关方法,判断是否符合对应的‘规则’
- 我们可以定义一些计算机识别的规则语法,通过规则语法定义出邮箱验证的逻辑,之后再进行验证
// 创建正则表达式
var reg = new RegExp('a','i');
var str = 'abcd';
// 调用正则表达式对象的test方法进行校验
var res = reg.test(str);
console.log(res); // true
规则(数字、字母)
// 判断一个字符串是否包含a和b
var reg = new RegExp('a | b' , 'i')
// 判断一个字符串是否包含字母
// a | b | c | d ...'
// [] 查找某个范围内的字符
// [ab]
// [a-z] 任意小写字母
// [A-Z] 任意大写字母
// [A-z] 任意字母
reg = /[A-z]/i;
console.log(reg.test('abcd')) // true
/*
问题:检查一个字符串是否包含abc,aec,adc
分析:都有a和c中间不同
结论:reg = /a[bed]c/i
*/
reg = /a[bed]c/i;
console.log(reg.test('abc')); // true
console.log(reg.test('abbc')); // false
/*
问题:检查一个字符串是否存在a和b之外的字符
分析:ab之外
结论:reg = /[^ab]/i (只要包含ab之外的字符都行) ^表示之外
*/
reg = /[^ab]/i;
console.log(reg.test('ab')); // false
console.log(reg.test('abc')); // true
正则表达式字符串
- splic()
- 将字符串拆分成一个数组
- 创建一个正则表达式作为参数,根据正则进行拆分
- 默认全局匹配
- search()
- 搜索字符串是否含有指定的内容
- 如果搜索到指定的内容,则返回第一次出现的索引位置
- march()
- 找到一个或多个正则表达式的匹配
- 根据正则规则将符合条件的内容提取出来
- 默认只找到第一个匹配的字母,需要设置全局匹配模式
- 设置多个匹配模式,没有顺序要求
- 返回的结果为数组
- replace(正则,新内容)
- 将字符串中指定的内容,替换成新内容
// 根据任意字母拆分
var str = '1a2b3c4d';
var res =str.split(/[a-z]/i); // 1 , a , 2 , b , 3 ,....
str = 'abc def ghl';
res = str.search(/a[bed]c/); // 0 // 返回查找的位置
// 将字符串中的所有字母提取出来
str = 'abc def ghl';
res = str.match(/[a-z]/i); // [a]
res = str.match(/[a-z]/ig); // [a , b , c , d ....]
res = str.replace(/[abc]/ig,'好');
res = str.match(/[a-z]/ig); // a好b好c好d....
// 删除所有字母
res = str.replace(/[a-z]/ig,''); //
规则(量词)
量词:设置一个内容出现的次数
- {n}:出现n次
- 量词只对它前面的一个字符起作用,可以使用()表示一组
- {m , n}:出现m~n次
- {m , }:表示至少出现一次,相当于{1 , }
- +:表示至少出现n次
- *:表示0个或n个
- ?:表示0个或一个
- ^:开头
- $:结尾
问题:判断一个字符串是否包含多个相同的字母?
var res = /aaa/ig;
var res = /a{3}/ig; // 表示字母a连续出现三次
console.log(reg.test('abc')); // false
console.log(reg.test('aaabc')); // true
// 问题:ab连续出现三次
reg = /[ab]{3}/; // a或b出现三次,不需要连续
console.log(reg.test('aaabcbb')); // true
reg = /(ab){3}/; // ab连续出现三次
console.log(reg.test('abcabab')); // false
console.log(reg.test('ababab')); // true
// 字母b出现1~3次
reg = /b{1,3}/;
console.log(reg.test('b')); // true 出现1次
console.log(reg.test('bb')); // true 出现2次
console.log(reg.test('bbb')); // true 出现3次
console.log(reg.test('bbbb')); // false 出现4次
// 字母b出现3次以上
reg = /b{3,}/;
console.log(reg.test('bb')); // false 出现2次
console.log(reg.test('bbb')); // true 出现3次
console.log(reg.test('bbbb')); // true 出现4次
// 字母b至少出现1次
reg = /b+/;
console.log(reg.test('ac')); // false 出现0次
console.log(reg.test('bbb')); // true 出现3次
// 字母b出现0个或多个
console.log(reg.test('ac')); // true 出现0次
console.log(reg.test('bbb')); // true 出现3次
// 字母b出现0个或1个
reg = /b{0,1}/;
reg = /b?/;
// 字符串中,字母a或b开头
reg = /^[ab]/
// 字符串中,字母a或b结尾
reg = /[ab]$/
// 字符串中,字母a开头或结尾
reg = /^a$/; // 同时使用^$则要求字符串必须完全符合正则表达式
console.log(reg.test('ac')); // false
console.log(reg.test('a')); // true
reg = /^a | a$/
console.log(reg.test('abc')); // true
console.log(reg.test('a')); // true
规则(任意字符、边界)
- .表示任意字符
- \表示转义字符(字符串中的 \ 也表示转义。所以为了表示使用:\)
检查字符串是否含有.
reg = /\./;
console.log(reg.test('abc.abc')); // true
console.log(reg.test('a')); // true
检查字符串是否含有\
reg = /\\/;
console.log(reg.test('a\b')); // false
console.log(reg.test('a\\b')); // true
reg = new RegExp('\\.' , i);
console.log(reg.test('a.b')); // true
console.log(reg.test('ab')); // false
reg = /\w/ // 查找数字、字母及下划线。[0~9A-z_]
reg = /\W/ // 查找非数字、字母及下划线。[^0~9A-z_]
reg = /\d/ // 查找任意数字。[0-9]
reg = /\D/ // 查找是否存在任意非数字。[^0-9]
reg = /\s/ // 空格是否存在
reg = /\S/ // 空格以外的是否存在
// \b 表示单词的边界
// \B 除了单词的边界
reg = /\bHello\b/;
console.log(reg.test('Hello word')); // true
接收输入,排除用户误操作的空格
var str = pormpt();
// 所有空格都去除
str = str.replace(/\s/g,'');
// 开头和结尾空格都去除
str = str.replace((/^\s/ | /\s$/),'');