正则表达式

正则表达式

菜鸟工具正则文档
MDN官方文档

正则表达式是国际标准,跨越语言

正则表达式是一个规则,用于验证字符串。

基础

  1. 字面量匹配

规则中直接书写字面量字符

  1. 特殊字符
.   
^
$
  1. 转义符
\n
\r
\t
\s
\S
\b
\B
\d
\D
\w
\W
\u

转义符可以将特殊字符转义

  1. 字符集
[字符范围]

匹配中文: [\u4e00-\u9FA5]

  1. 量词

前面的规则出现的次数

*
+
?
{n}: 匹配n个
{n,}: 匹配>=n个
{n,m}: 匹配n-m个

JS中的应用

js中,正则表达式表现为一个对象,该对象是通过构造函数RegExp

创建正则对象

  1. 字面量模式
  2. 构造函数模式
    规则固定一般用第一种,规则会改变或者用户输入用第二种
var reg = /\d+?/g;
var reg1=new RegExp("\d+?")

正则实例成员

  • global
  • ignoreCase
  • multiline
  • source
  • test方法:验证某个字符串是否满足规则
  • exec方法:execute,执行匹配,得到匹配结果。
var reg = /\d+/g;
        var s = "1234abc123aaa";

        //得到所有的匹配结果和位置
        while (result = reg.exec(s)) {
            console.log(`匹配结果:${result[0]},出现位置:${result.index}`);
        }

        //判断匹配多少处
        // var n = 0;
        // while (reg.test(s)) {
        //     n++;
        // }

        // console.log(`匹配了${n}次`);

正则表达式,默认情况下,适用贪婪模式
在量词后,加上?,表示进入非贪婪模式
在这里插入图片描述

字符串对象中的正则方法

  • split:通过分离字符串成字串,将字符串对象分割成字符串数组。
  • replace:返回指定重复次数的由元素组成的字符串对象
  • search:对正则表达式和指定字符串进行匹配搜索,返回第一个出现的匹配项的下标。
  • match:使用正则表达式与字符串相比较。
 // 去掉空白字符,首字母大写
        var s = "hello world\tjavascript\nyes";
        s = s.replace(/\s*\b[a-z]\s*/g, function(match){
            return match.toUpperCase().trim();
        });
        console.log(s);
        //HelloWorldJavascriptYes


        //将空白字符替换为逗号
        s = "hello world\tjavascript\nyes";
        s=s.replace(/\s/g,",")
        console.log(s);
        //hello,world,javascript,yes
        
        // 按照逗号、空格、横杠、制表符进行分割
        s = "hello world\tjavascript\nyes";
        var result = s.split(/[, \-\s]/);
        console.log(s, result);
        //["hello", "world", "javascript", "yes"]


        s = "1212a3232a323";
        var result = s.match(/\d+/g)
        console.log(s, result);
        // ["1212", "3232", "323"]


        s = "1212a3232a323";
        var result = s.search(/\d+/g)
        console.log(s, result);
        // 1212a3232a323 0

进阶

捕获组

用小括号包裹的部分叫做捕获组,捕获组会出现在匹配结果中

var reg = /(\d[a-z])([a-z]+)/g;
        var s = "2afsdf-5fdgdfg-9asddf";
        while (result = reg.exec(s)) {
            console.log(result);
        }

捕获组可以命名,叫做具名捕获组

 // 给捕获组加上名字
        var s = "2015-5-1, 2019-6-19, 2000-04-28";
        //得到每一个日期,并得到每个日期的年月日
        var reg = /(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})/g;
        while (result = reg.exec(s)) {
            console.log(result.groups,result.groups.year,result.groups.month,result.groups.day);
        }

非捕获组

var s = "2015-5-1, 2019-6-19, 2000-04-28";
        //得到每一个日期,并得到每个日期的年月日
        var reg = /(?:\d{4})-(?:\d{1,2})-(?:\d{1,2})/g;

反向引用

在正则表达式中,使用某个捕获组,\捕获组编号

正向断言(预查)

检查某个字符后面的字符是否满足某个规则,该规则不成为匹配结果,并且不称为捕获组

负向断言(预查)

检查某个字符后面的字符是否不满足某个规则,该规则不成为匹配结果,并且不称为捕获组

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值