JavaScript中的正则表达式

本文详细介绍了JavaScript中的正则表达式语法,包括字面量创建、实例创建、元字符、量词、分组、选择匹配、重复匹配、惰性匹配、反向引用、正则运算符优先级以及常用方法和属性。文章通过实例解析了正则表达式的使用方法和原理,帮助读者深入理解和掌握正则表达式在字符串处理中的应用。

前言

JS正则表达式语法大全(非常详细)

js中的正则表达式_wan_da的博客-优快云博客

JS 正则表达式_js正则表达式_鲨鱼辣椒️面的博客-优快云博客

JavaScript 正则表达式 | 菜鸟教程

https://www.cnblogs.com/lnlvinso/p/10467941.html

        正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

        正则表达式是一种通用的工具,在 JavaScript、PHP、Java、PythonC++ 等几乎所有的编程语言中都能使用;但是,不同编程语言对正则表达式语法的支持不尽相同,有的编程语言支持所有的语法,有的仅支持一个子集。本节讲到的正则表达式语法适用于 JavaScript

说白了正则表达式就是处理字符串的,我们可以用它来处理一些复杂的字符串

为什么要学习正则表达式

我们直接用一个例子来说明:

//找出这个字符串中的所有数字
var str = 'abc123de45fgh6789qqq111';
//方法1
     function findNum(str) {
        var tmp = '',
            arr = [];
        for (var i = 0; i < str.length; i++) {
            var cur = str[i];
            if (!isNaN(cur)) {
                tmp += cur;
            } else {
                if (tmp) {
                    arr.push(tmp);
                    tmp = '';
                }
            }
        }
        if (tmp) {
            arr.push(tmp)
        }
        return arr;
    }
    console.log(findNum(str))
    //["123", "45", "6789", "111"]
    
//方法2 使用正则表达式
    var reg = /\d+/g;
    console.log(str.match(reg))
   // ["123", "45", "6789", "111"]

        通过比较2种方法我们明显看出在对字符串进行处理时,使用正则表达式会简单许多,所以虽然正则表达式看起来像是火星文一样的一堆乱码的东西,但我们还是有必要去学习它的。

一、正则表达式的创建方式

1、通过字面量创建

语法: /正则表达式主体/修饰符(可选)

注意:/....../     以 / 开头,以 / 结尾,中间的内容为正则表达式

 试例:

var reg = /pattern/flags

2、通过实例创建

语法:   new RegExp(pattern,flags(可选))

注意:

  • JS中有自带RegExp构造函数
  • 在 RegExp() 构造函数中使用元字符时,应使用双斜杠。因为通过实例创建会自动加上/.../

参数分析:

  • pattern:正则表达式
  • flags:标识(修饰符)
  • 标识主要包括:
    • 1. i 忽略大小写匹配
    • 2. m 多行匹配,即在到达一行文本末尾时还会继续寻常下一行中是否与正则匹配的项
    • 3. g 全局匹配 正则表达式将匹配目标字符串中所有符合模式的文本,而不是只匹配第一个符合模式的文本。

使用g时,匹配全部字符串,且根据上一次匹配结束的地方开始下一次匹配

不使用g时,匹配部分字符串,且每次都是从起始位置开始匹配

3、字面量创建方式和构造函数创建方式的区别

字面量创建方式不能进行字符串拼接,实例创建方式可以

var regParam = 'cm';
var reg1 = new RegExp(regParam+'1');
var reg2 = /regParam/;
console.log(reg1);  //   /cm1/
console.log(reg2);  //  /regParam/

字面量创建方式特殊含义的字符不需要转义,实例创建方式需要转义

var reg1 = new RegExp('\d');  //    /d/ 
var reg2 = new RegExp('\\d')  //   /\d/
var reg3 = /\d/;              //  /\d/

二、元字符

        根据正则表达式语法规则,大部分字符仅能够描述自身,这些字符被称为普通字符,如所有的字母、数字等。

        元字符就是拥有特动功能的特殊字符,大部分需要加反斜杠进行标识,以便于普通字符进行区别,而少数元字符,需要加反斜杠,以便转译为普通字符使用。JavaScript 正则表达式支持的元字符如下所示。

1、代表特殊含义的元字符

\d :  0-9之间的任意一个数字  \d只占一个位置

\D : 除了\d
\w :  数字,字母 ,下划线  0-9  a-z  A-Z  _

\W : 除了\w
\s :  空格或者空白等
\S : 除了\s

\b : 匹配边界 字符串的开头和结尾 空格的两边都是边界 => 不占用字符串位数

\B:匹配非单词边界

\0:查找 NUL字符

\f:查找换页符

\r:查找回车符

\t:查找制表符

\v:查找垂直制表符

\n : 匹配换行符
 . : 除了\n之外的任意一个字符,查找单个字符,除了换行和行结束符
 \ : 转义字符,绝大部分字符加反斜杠还表示字符本身
 | : 或者  or
() : 分组

\xdd:查找以八进制数 dd 规定ASCII 编码的字符

\xdd:查找以十六进制数 dd 规定ASCII 编码的字符

\uxxxx:查找以十六进制 xxxx规定的 Unicode 字符

        表示字符的方法有多种,除了可以直接使用字符本身外,还可以使用 ASCII 编码或者 Unicode 编码来表示。ASCII编码对照表

示例1:

  • 下面使用 ASCII 编码定义正则表达式直接量。
  • 由于字母 a 的 ASCII 编码为 97,被转换为十六进制数值后为 61,因此如果要匹配字符 a,就应该在前面添加“\x”前缀,以提示它为 ASCII 编码。
var r = /\x61/;
var s = "JavaScript";
var a = s.match(r);
console.log(a);  //[ 'a', index: 1, input: 'JavaScript', groups: undefined ]

示例2:

  •  除了十六进制外,还可以直接使用八进制数值表示字符。
  • 使用十六进制需要添加“\x”前缀,主要是为了避免语义混淆,而八进制则不需要添加前缀。
var r = /\141/;
var s = "JavaScript";
var a = s.match(r);
console.log(a);  //[ 'a', index: 1, input: 'JavaScript', groups: undefined ]

示例3:

  • ASCII 编码只能够匹配有限的单字节字符,使用 Unicode 编码可以表示双字节字符。Unicode 编码方式:“\u”前缀加上 4 位十六进制值。
var r = /\u0061/i;
var s = "JavaScript";
var a = s.match(r);
console.log(a);  //[ 'a', index: 1, input: 'JavaScript', groups: undefined ]

2、代表边界的量词元字符

边界就是确定匹配模式的位置,如字符串的头部或尾部,具体说明如表所示。

 ^ : 限定开始位置 => 本身不占位置
 $ : 限定结束位置 => 本身不占位置

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值