Js 正则表达式

本文深入介绍了正则表达式的基本概念和使用方法,包括创建正则表达式、使用修饰符、字符类、范围类、预定义类以及量词的应用。详细讲解了贪婪模式与非贪婪模式的区别,并通过实例展示了如何进行分组和使用断言。此外,文章还探讨了正则表达式在字符串匹配和搜索中的关键角色。
摘要由CSDN通过智能技术生成

正则表达式

1.正则表达式概念

正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。就是说为了去验证字符串是否满足们某个规则。

2.正则表达式的使用

2.1 创建正则表达式
  1. 使用字面量的方式:由斜杆(/)包围

    var reg = /abc/;
    
  2. 使用构造函数的字符串参数

    var reg = new RegExp(/"abc"/);	//首个参数为常规字面量
    var reg = new RegExp("abc");	//首个参数为字符串
    
2.2 修饰符(可以在全局搜索中不区分大小写
  1. i:执行对大小写不敏感的匹配(ignoreCase)。

  2. g:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)(global)。

  3. m:执行多行匹配(multiline)。

    注意 :修饰符可以同时使用多个

  4. String.match(RegExp)返回正则匹配的结果,如果没有满足正则条件的,那么返回null。作用:1.搜索字符串中是否存在某个字符 2.输出正则匹配的所有字符

    var str = 'aaaaaAAAAAAAAAAAAAfghgdgdcghyttafv';
    var reg = /[a]/gi;
    console.log(str.match(reg));	//["a", "a", "a", "a", "a", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "a"]
    
2.3 字符类

使用 [] 来构建简单的类,所谓的类是指符合某些特性的对象;一个泛指;而不是特定某个字符。例如:[abc] 匹配 a或 b 或 c 中其中一类即可。

// 匹配多个字符,为"中"或"国"或"人"
var reg = /[中国人]/g;
// 匹配中国人这个字符串
var reg1 = /中国人/g;

var str = '我是在中间的国家的人,中国人';
console.log(str.match(reg));	//["中", "国", "人", "中", "国", "人"]
console.log(str.match(reg1));	//["中国人"]
2.4 范围类

范围类(使用一个“-”符号连接):

  • 小写的26个英文字母 [a-z]
  • 大写的26个英文字母 [A-Z]
  • 0-9的数字 [0-9]
//匹配26个字母
var reg2 = /[qwertyuioplkjhgfdsazxcvbnm]/gi;
var reg3 = /[a-z]/;
var reg4 = /[A-Z]/;
var reg5 = /[a-zA-Z]/g; //a-z或者A-Z中的任意字母
var reg6 = /a-zA-Z/g; //a-zA-Z这个字符串
var str1 = 'kdsa13567gva-zA-Z__';
// 匹配数字字母下划线任意一个字符,匹配结果,字符长度为1
var reg7 = /[a-zA-Z0-9_]/g;//g可以匹配 1-n个结果
console.log(str1.match(reg5));	//["k", "d", "s", "a", "g", "v", "a", "z", "A", "Z"]
console.log(str1.match(reg6));	//["a-zA-Z"]
2.5 预定义类

"^" :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。

"$" :会匹配行或字符串的结尾。

"\b" : 不会消耗任何字符只匹配一个位置,常用于匹配单词边界。 如 :我想从字符串中"This is Regex"匹配单独的单词 “is” 正则就要写成 “\bis\b” 。\b 不会匹配is 两边的字符,但它会识别is 两边是否为单词的边界 。

"\d": 匹配数字,例如要匹配一个固定格式的电话号码以0开头前4位后7位,如0737-5686123 正则:^0\d\d\d-\d\d\d\d\d\d\d$ 。

"\w":匹配字母,数字,下划线任意一个,相当于[a-zA-Z0-9_]。

"\s":匹配空格 。

var str1 = 'kdsa13567gva-zA-Z__';
var reg8 = /\w/g;
console.log(str1.match(reg8)); //["k", "d", "s", "a", "1", "3", "5", "6", "7", "g", "v", "a", "z", "A", "Z", "_", "_"]
2.6 取反

在匹配的字符前加上一个“^"符号,表示取反

var str = 'ajfg jaus gyf54 6564!@#$%';
//除了0-9数字
var reg = /[^0-9]/g;
console.log(str.match(reg));	//["a", "j", "f", "g", " ", "j", "a", "u", "s", " ", "g", "y", "f", " ", "!", "@", "#", "$", "%"]
 //除了英文字母
var reg1 = /[^a-zA-Z]/g;      
console.log(str.match(reg1));	//[" ", " ", "5", "4", " ", "6", "5", "6", "4", "!", "@", "#", "$", "%"]
//匹配空格 \s [' ']
//匹配非空格 \S [^' ']
console.log(str.match(/\s/g));	//[" ", " ", " "]
console.log(str.match(/\S/g));	//["a", "j", "f", "g", "j", "a", "u", "s", "g", "y", "f", "5", "4", "6", "5", "6", "4", "!", "@", "#", "$", "%"]

几种反义:

"\W" :匹配任意不是字母,数字,下划线 的字符。

"\S" : 匹配任意不是空白符的字符。

"\D" : 匹配任意非数字的字符。

"\B" : 匹配不是单词开头或结束的位置。

2.7 量词
  • {n} 一个正则字符出现n次

  • {n,m} 出现n到m 次,字符长度大于n,小于m

  • {n,} 至少出现n 次,最小为n

  • {,m} 最多出现m次,最大为m

  • + === {1,},匹配前导字符1次或多次

  • * === {0,},匹配前导字符0次或多次

  • ? === {0,1},匹配前导字符0次或一次。事实上是表示前导字符是可选的

    var phoneNumber = /^[1][3-9][0-9]{9}$/;
    var str1 = '13383839248';
    console.log(str1.match(phoneNumber)); //["13383839248", index: 0, input: "13383839248", groups: undefined]
    console.log(phoneNumber.test(str1));  //true
    
2.8 贪婪模式和非贪婪模式
  • 默认贪婪模式,只有量词有贪婪模式,,尽可能多的匹配
  • 非贪婪模式,量词 ? 就是非贪婪模式,尽可能少的匹配
var reg = /\d+/;
var reg1 = /[0-9]{3,5}/g;
var reg2 = /[0-9]{3,5}?/g;//非贪婪模式
var str = 'adsfkh5661657asdgad464634';
console.log(str.match(reg1)); //["56616", "46463"]
console.log(str.match(reg2)); //["566", "165", "464", "634"]
2.9 分组
  • 使用(),进行分组
//yyc连续出现3次
var reg3 = /(yyc){3}/;
var str3 = 'aayycyycdfyyc';
console.log(str3.match(reg3));
  • 忽略分组:不想捕获某个分组时候,在分前后面加上?:就可以了
//忽略yyc 反向引用时候 不能引用到yyc,相当于没有分组
// 不是不能匹配yyc
var reg5 = /.{2}(?:yyc)(\w){2}/g;
var str5 = 'aayycjkdfyycddfyycdad';
console.log(str5.match(reg5));
2.10 断言

断言:就是匹配规则的判断条件

  1. 先看条件在匹配

  2. 先匹配在看条件

  3. 输出结果:1)规则匹配字符。2)看右边的字符是否满足断言,满足输出匹配字符;不满足,不输出匹配字符

  4. 注意:断言, 判断的不是 规则匹配的结果;判断的是,匹配结果的下一个字符 是否满足断言

    // 1;匹配 re 
    // 2: 要求只能是 regular 中re 
    var str1 = 'a regular expression'
    
    // 在匹配的结果中 做了条件限制---->断言
    var reg3 =/re/g;
    console.log(str1.match(reg3));
    
    var reg4=/re(?=gular)/g;
    console.log(str1.match(reg4));//["re"]
    var res = str1.replace(reg4,'哼');
    console.log(res);//a 哼gular expression
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值