正则表达式

正则表达式定义

  1. 符合一些规则的字符串,计算机能够识别的‘规则’,这些规则语法被称为正则表达式

  2. js中需要创建正则表达式对应的对象,这些对象提供的方法能够按照规则进行校验

  3. 正则表达式是描述字符串的对象

  4. 创建正则表达式对象

    语法:

    ​ 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

正则表达式字符串

  1. splic()
    • 将字符串拆分成一个数组
    • 创建一个正则表达式作为参数,根据正则进行拆分
    • 默认全局匹配
  2. search()
    • 搜索字符串是否含有指定的内容
    • 如果搜索到指定的内容,则返回第一次出现的索引位置
  3. march()
    • 找到一个或多个正则表达式的匹配
    • 根据正则规则将符合条件的内容提取出来
    • 默认只找到第一个匹配的字母,需要设置全局匹配模式
    • 设置多个匹配模式,没有顺序要求
    • 返回的结果为数组
  4. 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,'');	// 

规则(量词)

量词:设置一个内容出现的次数

  1. {n}:出现n次
  2. 量词只对它前面的一个字符起作用,可以使用()表示一组
  3. {m , n}:出现m~n次
  4. {m , }:表示至少出现一次,相当于{1 , }
  5. +:表示至少出现n次
  6. *:表示0个或n个
  7. ?:表示0个或一个
  8. ^:开头
  9. $:结尾
问题:判断一个字符串是否包含多个相同的字母? 

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


规则(任意字符、边界)

  1. .表示任意字符
  2. \表示转义字符(字符串中的 \ 也表示转义。所以为了表示使用:\)
检查字符串是否含有.
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$/),'');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值