JS正则表达式语法

创建

//1、使用字面量来创建表达式
//    语法:var 变量 = /正则表达式/匹配模式
//2、使用构造函数创建 
//    语法:var  reg = new RegExp("a", "i")

元字符

就是拥有特动功能的特殊字符,大部分需要加反斜杠进行标识,以便于普通字符进行区别,而少数元字符,需要加反斜杠,以便转译为普通字符使用。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

匹配模式

g:全局匹配.
I:忽略大小写.

边界量词

在这里插入图片描述

字符类

描述字符范围
(): 括号表示字符范围。
[]: 方括号中可以包含多个字符,表示匹配其中任意一个字符。
如果多个. 字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符~表示。如果在方括号内添加脱字符^前缀,还可以表示范围之外的字符.

选择匹配

| : 表示或者
用竖线:"|"表示在两个子模式的匹配结果中任选一个。

var r = /\w+|\d+/;     //匹配任意数字或字母
// []里的内容也是“或”的关系.
// [ab] == a|b

常用:
[abc]:查找方括号内任意一个字符。[或匹配a或者b或者c]
[a-c]: [abc]相同的含义.
[^abc]:查找不在方括号内的字符。
[^0-9]:查找非数字.
[0-9]:查找从0至9范围内的数字,即[查找数字]。
[a-z]:查从 a 到 z 范围内的字符,[查小写字母]。
[A-Z]:查从 A 到Z 范围内的字符,即[查大写字母]。
[A-z]:查从A到z范围内的字符,即[所有大小写的字母]。
[a-zA-Z0-9]:匹配任意大小写字母和数字:

 //匹配字符串中是否含abc,adc,aec
var reg = /a[bde]c/;    
// [^] 除了.
var reg = /[^ab]/;//匹配字符串中除了a,b,ab
console.log(reg.test("ab"));  // false
console.log(reg.test("abc"));  // true
// [ab] == a|b

限定符 [即量词]

重复匹配:定义了重复匹配字符的确数或约数。
在这里插入图片描述

通过量词可以设置一个内容出现的次数
量词只对它前边的一个内容起作用
a+   :a出现1次或多次,[1及以上,相当{1,} ]
a*   :a出现0次或多次 
a?   :a出现0次或1次
a{6}   :a出现6次
a{2,6}   :a出现2~6次
a{2,}   :a出现2次以上

let reg = /a{3}/
console.log(reg.test("abbbbc"));  // false
reg = /(ab){3}/
console.log(reg.test("abbbbc"));  // false
console.log(reg.test("abababbc"));// true

惰性匹配

重复类量词都具有贪婪性,在条件允许的前提下,会匹配尽可能多的字符。
?、{n} 和 {n,m} 重复类具有弱贪婪性,表现为贪婪的有限性。
*、+ 和 {n,} 重复类具有强贪婪性,表现为贪婪的无限性。

针对 6 种重复类惰性匹配的简单描述如下:
{n,m}?:尽量匹配 n 次,但是为了满足限定条件也可能最多重复 m 次。
{n}?:尽量匹配 n 次。
{n,}?:尽量匹配 n 次,但是为了满足限定条件也可能匹配任意次。
??:尽量匹配,但是为了满足限定条件也可能最多匹配 1 次,相当于 {0,1}?+?:尽量匹配 1 次,但是为了满足限定条件也可能匹配任意次,相当于 {1,}?*? :尽量不匹配,但是为了满足限定条件也可能匹配任意次,相当于 {0,}?

例如:

//下面代码演示如何使用边界量词。先定义字符串:
var s = "how are you"
//1) 匹配最后一个单词
var r = /\w+$/;
var a = s.match(r);  //返回数组["you"]
//2) 匹配第一个单词
var r = /^\w+/;
var a = s.match(r);  //返回数组["how"]
//3) 匹配每一个单词
//纯文本复制
var r = /\w+/g;
var a = s.match(r);  //返回数组["how","are","you"]

字符串和正则配合的函数

//split字符串拆分返回一个数组
 //根据任意字母来将字符串拆分
 //不指定全局匹配也会全部拆分
let str = "1a2n3c4d"; 
let result = str.split(/[A-z]/); 
console.log(result);// ['1', '2', '3', '4', '']
// search() :搜索字符串是否含有指定内容
// 搜到匹配内容则返回第一次出现的索引,没有就返-1;
//只会查找第一个,及时设置全局匹配也没有用
let str = "Hello abc hello aec afc";
let result = str.search(/a[bef]c/); 
console.log(result);  // 6
// match() :从一个字符串中将符合条件的内容取出来
// 默认只会找到第一个匹配内容,找到就停止检索;
// 可以设置全局匹配模式查找所有内容
let str = "1a2n3c4d5A6F7H";
let result = str.match(/[A-z]/g); 
console.log(result);  //  ['a', 'n', 'c', 'd', 'A', 'F', 'H']
result = str.match(/[a-z]/gi); 
console.log(result);  // ['a', 'n', 'c', 'd', 'A', 'F', 'H']
// replace(oldStr,newStr) :将字符串中指定内容替换为新内容
// 默认只会替换第一个;
let str = "1a2n3c4d5A6F7H";
let result = str.replace(/a/gi,"@_@"); 
console.log(result);  // 1@_@2n3c4d5@_@6F7H

常见的正则表达式:

1、国内手机号

//1、国内手机号都是1开头
//2、开头一般是:13,14,15,17,18,所以第二个数字是3,4,5,7,8,用中括号就可以限制用哪些字符
//3、接下来都是0——9的数字,打括号表示重复的次数 
var r = /^1[34578]\d{9}$/; 
console.log(r.test("18819302751"));//输出 true

在这里插入图片描述

2、Email

在这里插入图片描述

//1、邮箱开头包含所有大小写字母,数字和_-.这三个字符 ,-表中括号内的范围,.这个字符在正则表示任意字符,要用\来转义,,所以结果:A-Za-z0-9_\-\.
//2、A-Za-z]{2,4}表示.com 或.cn 2~4个字母组成
var r = /^([A-Za-z0-9_\-\.])+@([A-Za-z0-9_\-.])+.([A-Za-z]{2,4})$/;  
console.log(r.test("99154507@qq.com"));//输出 true

3、QQ号

//1、第一个数字是1~9,[]选定指定的数字,也可在[]内用—来表示数字范围, =>/^[1-9]/
//2、第二个后是0~9数字,QQ最多5位,最少10位数,只取4~9个=>/[0-9]{4,9}$/
var s = "1271024201" 
var r = /^[1-9][0-9]{4,9}$/; 
var a = s.match(r); 

4、去除空格

在这里插入图片描述

参看资料:
常见正则表达式
regexp对象
RegExp 对象参考手册

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值