正则表达式——一个看起来高深的玩意er

                                          正则表达式

定义:是一种字符串检索模式,表现为一个字符串的形式
本质:对象类型,只不过表现为对象的形式
语法:/ 正则表达式主体 / 修饰符 (例:var frk_reg=/frank/i)
用法:正则表达式在实际开发中不会单独使用,而是会配合一些方法来完成某种功能。
构建正则表达式的方式
字面量:适用于正则表达式始终保持不变

const regex = /ab+c/;
const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;

使用正则对象创建
RegExp对象
字面量创建正则表达式:\正则表达式主体\修饰符
通过构造函数创建正则:var regExp=new regExp(“正则主体”,“修饰符”)
描述:JS为正则表达式提供了一个正则类(正则的构造函数)RegExp通过构造函数创建的对象称为正则对象。

let regex = new RegExp("ab+c");
let regex = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$/, "gi");
let regex = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");

注意:
1 通过构造函数创建正则对象,参数必须为字符串形式
2 构造函数创建的正则表达式,和字面量的创建方式具有相同的作用

存在的方法:
1)search方法中的表现
(字符串中的search方法等价于indexOf()返回下标)
描述:让search在字符串中检索符合正则规则的表达式,如果匹配,返回子字符串出现的下标

var str = "Visit Runoob!"; 
var n = str.search(/Runoob/i);
//6

2)replace(参数1,参数2)方法中的体现
描述:让replace根据参数1的规则进行查找,并将[ 满足规则一的所有内容 ]替换为参数二。
注意:replace本身不会改变字符串,而是生成一个新的字符串

var str = document.getElementById("demo").innerHTML; 
var txt = str.replace(/microsoft/i,"Runoob");
//visited Runoob

3)match方法中的体现
描述:
a. match能够匹配符合参数规则的字符串第一次出现的信息
b. 当规则有g表示全局时,表示匹配【所有符合参数规则的子字符串】,并构成集合返回
语法:str.match(regexp)
如果使用g标志,则将返回与完整正则表达式匹配的所有结果(Array),但不会返回捕获组,或者未匹配 null。
如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。 在这种情况下,返回的项目将具有如下所述的其他属性,或者未匹配 null。
若不提供参数则为空数组,若传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp
4)test方法中的体现:
test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。
语法: regexObj.test(str)
str:用来与正则表达式匹配的字符串
如果正则表达式与指定的字符串匹配 ,返回true;否则false。

    let str = 'hello world!';
    let result = /^hello/.test(str);
    console.log(result); 
    // true
  1. exec() 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。
    语法:regexObj.exec(str)
    str要匹配正则表达式的字符串。
    **描述:**用来查找在【指定字符串中】【第一个】【满足正则表达式规则】的子字符串的信息,如果匹配成功则返回一个信息集合(对象类型),如果匹配失败则返回null。
    类似于match()方法,但match匹配一次则结束,且每一次匹配都会重头开始。
    特性:
    1每次匹配都会从上一次匹配位置结束继续向后匹配,而不是每次都从头开始。
    2当exec匹配的正则中存在【组匹配符号()】的时候,会先匹配正则内容,在匹配一次组匹配内容,并把两次匹配的结果均匹配出来。
    3 正则对象中实际存在一个隐式的参数叫LastIndex,本参数代表上一次匹配结束时的下标。
    方法总结:
    reg.test(str) reg.search(str) 用来根据正则表达式判断字符是否存在,返回结果
    reg.match(str ) reg.exec(str) 用来根据正则表达式搜索匹配字符信息,返回结果

定义一 修饰符
修饰符是正则表达式进行字符串检索时规则的制定者之一,修饰符表示应该按照何种规则进行检索。
常见的类型 i,g,m
i 修饰符:表示正则检索内容时不区分大小写
g 修饰符:表示正则检索内容时采用全局匹配,而不是找到第一个就停止
m 修饰符:代表了【换行匹配的规则】,对$^有影响
定义二 检索模式
是指正则表达式主体可以采用何种方式编写,也是规则的制定者之一
类型:表达式模式 元字符模式
注意
检索模式中的几种模式可以混合使用,来达到精确制定规则的效果,在正则主体当中一个[ ]中括号代表一个字符,一个()代表一个词组

表达式模式:存在于方括号中即满足 (不仅替换英文,对中文也有效)
描述:通过表达式书写来制定检索规则的方式
类型: [abc] [0-9] (m|n)


** [abc]:**
在指定字符串中检索,查找任何满足【存在于方括号中】规则的字符或字符串。
举例:[12][ab]:表示全局中检索两个挨一起的字符,第一个必须是1或者2 ,第二个必须是a或b.
[0-9]: 匹配0~9的数字


(m|n)模式
在指定字符串中检索,查找任何满足【以|分割的选择之一】的字符或字符串
注意:本模式可以匹配的不仅仅是字符,还可以是词组(多个字符)


定义三 元字符模式
元字符:具有特殊含义的字符称为元字符
通过元字符来进行正则检索的模式,称为元字符模式
常见的元字符模式有以下三种:
1 \d 在指定字符串中检索,查找任何是数字规则的字符 即满足
2 \D 非数字
3 \s 表示的规则是【是空格,即满足】制表符,换行符
4 \S 除了空格,制表符,换行符
5 \b 表示的规则是【词语边界,即满足】可识别文件的长度大小
6 \w 数字,字母,下划线
7 \W 除了数字,字母和下划线
8 \n 换行
9.匹配任意的字符
10 .半角的点
11 //数量
\d \s \b \w \W …
一个元字符代表一个字符


定义四:量词模式
通过设置量词进行检索的模式
量词:能够检索内容出现次数的词语(+ * ?)
强调(量词只对其前面的第一个字符生效!!!!!!!!)
注意:量词通常不单独作为正则主体,而是会配合其他模式一起使用
类型 :n+ n* n?
n+量词模式:在原字符串中【存在一个或多个n】即满足
特点:与match()方法搭配使用,在匹配的时候实际上是,能匹配多少就匹配多少,直到不满足才停止
n*量词模式:存在零个或多个n,即满足
特点:匹配出的字符串结尾会多出一个空“ ”
n?量词模式:在原字符串中检索任何包括0个或1个n的字符串
特点:n?量词在匹配的时候实际上是,能匹配多点就匹配多点,只要一满足就立即结束。


正则表达式高级:
^初位字符:表示判断是否以某个内容开始
末 位 字 符 : 表 示 判 断 是 否 以 某 个 内 容 结 尾 注 意 : 如 果 一 段 字 符 被 包 裹 在 和 末位字符:表示判断是否以某个内容结尾 注意:如果一段字符被包裹在^和 之间,那么匹配结果只能是这个字串本身,其余都不能匹配成功

重复类:
重复类其实是正则表达式中使用{}进行检索的一种模式的称谓{}用来匹配符合正则的要求连续出现的次数。
subStr{n}想要检索的内容恰好出现n次
subStr{n,}想要检索的内容至少出现n次
subStr{n,m}想要检索的内容至少出现n次,至多出现m次
注意:对于重复类,有些是能匹配多少就匹配多少{n,}{n,m}
有些是匹配到就结束{n}
ar phoneNumber=‘1234567901’;
var reg=/\d{11}/gi 表示连续匹配11个数字
注意:重复类如果不存在组匹配字符,那么重复类仅对前面的第一个字符有效。


两种特有的模式:贪婪模式和懒惰模式
贪婪模式:只要符合正则要求就一直向下匹配,直到无法再匹配为止的行为模式(例如n*)。
懒惰模式:一旦匹配到复合正则要求的内容就立即结束的行为模式。
在正则中:不同的符号能够隐式的说明当前的正则是采用贪婪模式还是懒惰模式
贪婪模式 n+ n * {n,} {n,m}
懒惰模式n? {n} {n,}? n*?..都是懒惰模式的表现符号
脱字符:
【^abc】:不是a或b或c字符
描述:当且仅当^符号出现在中括号的首位的时候表示【不是…即成立】的规则
注意:
如果^出现在正则首位,但没有写在中括号首位,表示初位字符
如果^出现在正则主体,但没有写到中括号主体,表示普通字符
【^】:表示匹配任意字符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值