js-正则表达式

正则表达式

正则表达式:用于匹配规律规则的表达式,经常用于表单校验,高级搜索等。

1. 创建正则表达式
构造函数

var regExp = new RegExp(/\d/);

正则字面量

var regExp = /\d/;

2. 元字符

正则表达式由一些普通字符和元字符组成,普通字符包括大小写字母、数字等,而元字符则具有特殊的含义。

(1) 常见元字符 (重要: \d \w . )
元字符等同于含义
.[^\n\r]除了换行和回车之外的任意字符
\d[0-9]数字字符
\D[^0-9]非数字字符
\w[a-zA-Z0-9_]单词字符(所有的字母数字和_)
\W[^a-zA-Z0-9_]非单词字符
\s[\f\r\n\t\v]不可见字符,包含空格
\S[^\f\r\n\t\v]可见字符

特殊字符转换:
\’ 单引号 \" 双引号 \& 和号 \\ 反斜杠 \n 换行符 \r 回车符 \t 制表符(横) \v 制表符(纵) \b 退格符 \f 换页符

(2) 优先级

| 表示或,优先级最低
()表示分组,优先级最高

(3) 字符类的元字符

[ ]表示一个字符的位置 []里面写这个位置可以出现的字符

console.log(/[abc]/); // 匹配a,b,c

[^]表示非 是否包括除了XX以外的字符串

//[^0]:除了0以外的字符
console.log(/[^0]/.test("1aaa000")); // true
console.log(/[^0]/.test("a")); // true

[a-z] [1-9] [a-zA-Z0-9] 表示一个字符的位置的范围

console.log(/[a-z]/.test("d")); //小写字母  // true
console.log(/[A-Z]/.test("d")); //大写字母  // false
console.log(/[0-9]/.test("8")); //数字  // true
console.log(/[a-zA-Z0-9]/); //所有的小写字母和大写字母以及数字 
(4) 边界类元字符

用于精确的匹配。
^ 表示开头 []里面的^表示取反
$ 表示结尾
精确匹配: 前面^后面$

console.log(/^chuan/.test("dachuan")); // 必须以chuan开头  // false
console.log(/chuan$/.test("chuang")); // 必须以chuan结尾  // false
console.log(/^chuan$/.test("chuan")); // 精确匹配chuan  // true    
// 精确匹配chuan,表示必须是这个,即使前面后面都有该字符
console.log(/^chuan$/.test("chuanchuan"));//fasle
(5) 量词类元字符

量词用来控制出现的次数,一般来说量词和边界会一起使用

// 量词用来控制出现次数的​
console.log(/a/.test("abc"));  // true
console.log(/^a/.test("abc"));  // true
console.log(/^a$/.test("abc"));  // false
  1. *表示出现0次或者更多次,x>=0
  2. +表示出现1次或者多次,x>=1
  3. ?表示出现0次或者1次,x=0或者x=1
  4. {n}表示连续出现n次
  5. {n,}表示连续出现n次或者n次以上
  6. {n,m}表示连续出现n-m次
// 思考:如何使用{}来表示*  +  ?   
*{0, }    +{1, }    ?{0,1}
3. 正则的使用
(1) 正则测试 test

reg.test(str);

  1. 验证座机
// 比如010-12345678  0797-1234567
// 开头是3-4位,首位必须是0
// -后面是7-8位
var phoneReg = /^0\d{2,3}-\d{7,8}$/;
  1. 验证姓名
// 只能是汉字
// 长度2-6位之间
// 汉字范围[\u4e00-\u9fa5]
var nameReg = /^[\u4e00-\u9fa5]{2,6}$/;
  1. 验证QQ
// 只能是数字
// 开头不能是0
// 长度为5-11位
var qqReg = /^[1-9]\d{4,10}$/;
  1. 验证手机
// 11位数字组成
// 号段13[0-9] 147 15[0-9] 177[0178] 18[0-9]
var mobileReg = /^(13[0-9]|147|15[0-9]|17[0178]|18[0-9])\d{8}$/;
  1. 验证邮箱
// 前面是字母或者数字
// 必须有@
// @后面是字母或者数字
// 必须有.
// .后面是字母或者数字
var emailReg = /^\w+@\w+(\.\w+)+$/;
(2) 字符串替换 replace

str.replace(reg);
str = str.replace(/ad/g,‘xx’); 将所有的ad替换成xx
str = str.replace(/ad/gi,‘xx’); 将所有的ad替换成xx i:忽略大小写
str = str.replace(/ad|AD/g,‘xx’); 将所有的ad/AD替换成xx

(3) 字符串匹配 match

str.match(reg);
匹配某个字符串中所有符合规律的字符串,支持参数传正则,返回的是一个匹配的数组。
正则里没有传/g查找所有,返回结果和reg.exec(str)相同。
str.match(/1[3-9]\d{9}/g);

var str = "甲手机号是:18511241111,乙手机号是:13211111111,丙手机号是:18522223333,丁手机号是:18511112293";
// 需求:把字符串中所有的手机号找出来。
console.log(str.match(/1[3-9]\d{9}/g));
// 打印结果:["18511241111", "13211111111", "18522223333", "18511112293"]
(4) 正则提取 exec

reg.exec(str);
提取匹配的字符串的每一个部分,()进行分组。
返回的是一个提取的数组,包含第一个匹配项。没有匹配项返回null。
该数组包含两个额外的属性: index 和 input。

var str = "今天是2018-05-11,要求得到年月日";
// 加小括号, 返回数组里的第一个元素是匹配到的结果, 其他元素(2-3-4)是对应匹配小括号里内容
var reg1 = /(\d{4})-(\d{2})-(\d{2})/;
// 不加小括号, 返回数组只有一个匹配值
var reg2 = /\d{4}-\d{2}-\d{2}/;
console.log(reg1.exec(str));
// ["2018-05-11", "2018", "05", "11", index: 3, input: "今天是2018-05-11,要求得到年月日", groups: undefined] --数组长度为4,后面的是属性
console.log(reg2.exec(str));
// ["2018-05-11", index: 3, input: "今天是2018-05-11,要求得到年月日", groups: undefined] --数组长度为1
方法总结:

正则表达式有2个方法:
reg.test() 测试 判断某个字符串是否符合正则的规律,常用于表单校验
reg.exec() 提取 提取匹配的字符串的每一个部分,()进行分组

字符串有2个方法:
str.replace() 替换 正则的替换
str.match(); 匹配 匹配某个字符串中所有符合规律的字符串,支持参数传正则

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值