正则表达式的知识点分类汇总

本文详细介绍了正则表达式的关键知识点,包括量词的使用(*、+、?、{n}、{n,}、{n,m})、边界匹配字符(、B、^、$)以及正则表达式对象的属性和方法。通过实例展示了如何利用正则进行匹配、替换等操作,同时讲解了贪婪模式、非贪婪模式、分组、前瞻断言等进阶概念。" 80123258,5030551,DIY指南:利用开源软件构建个人物联网系统,"['IoT', '开源', '数据分析', '家居自动化', '物联网平台']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

\ 做为转意

量词
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa (+和?)

+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa 

? 匹配前面元字符0次或1次,/ba*/将匹配b,ba 
{n} 精确匹配n次 
{n,} 匹配n次及以上,至少 
{n,m} 匹配n到m次 

x|y 匹配x或y 

[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) 
[^xyz] 不匹配这个集合中的任何一个字符 

(x) 匹配x保存x在名为$1...$9的变量中 
[\b] 匹配一个退格符 

任意字符

 

边界匹配字符
\b 匹配一个单词的边界 
\B 匹配一个单词的非边界 

^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" 
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" 


\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M 
\d 匹配一个字数字符,/\d/ = /[0-9]/ 
\D 匹配一个非字数字符,/\D/ = /[^0-9]/ 
\n 匹配一个换行符 
\r 匹配一个回车符 
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等 
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/ 
\t 匹配一个制表符 
\v 匹配一个重直制表符 
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9_] 
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。

 

RegExp对象:

1.字面量 var reg=/\bis\b/g; var reg=/\bis\b/gi;

2.构造函数

var reg = newRegExp('\\bis\\b','g');参数是字符串

 

对象的属性:reg.golbal,reg. ignoreCase,reg. multiline,

       Reg.lastIndex:匹配的内容最最后一个单词的下一个位置(如果是非全局调用(g)的话,为0)

       Reg.source:正则表达式的文本字符串’\d’

Regexp对象本身的方法(prototype

       RegExp.prototype.text(str),返回true/false

var reg=/\w/g;

while(reg.test('abc')){

       console.log(reg.lastIndex);//三次分别输出1,2,3

}

RegExp.prototype.exec(str),  ,

此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。

RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0

 

字符串的原型方法(serch,match,replace,replaceAll)

如果 regexp 没有标志 g,那么 match() 方法就只能在stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null,和exec一样

如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。

如:

var str="1 plus 2 equal 3"

document.write(str.match(/\d+/g))// 1,2,3

 

stringObject.replace(regexp/substr,replaceStr/function);

name = "Doe, John";

name.replace(/(\w+)\s*,\s*(\w+)/, "$2$1");//"John Doe"

 

name = 'aaa bbb ccc';

uw=name.replace(/\b\w+\b/g, function(word){

  returnword.substring(0,1).toUpperCase()+word.substring(1);}

  );

Function有四个参数:

 

修饰符(可以放在一起同时使用)

g:global,全文搜索,不添加,搜到第一个匹配就停止

i: ignore case,忽略大小写,正则默认大小写敏感

m: multiple lines多行搜索,把换行符当成新的一行

 如:‘@aa


        @bb

        @cc’.replace(/^@\w/gm,’X’)

 

贪婪模式:,匹配三到六次中取尽可能多的匹配,即默认匹配六次

非贪婪模式:在量词后面加上?即变成非贪婪模式,尽可能少的匹配

               只匹配三位,而不是五位

分组 使用()来分组,使量词作用于分组

                   (Breqe){3} 和Breqe{3}

| :可以将整个正则表达式进行或,如

                   Breqe|adfasdfa:

                   如果不想作用于整个表达式,可以用分组进行隔绝:

Bre(asa|sqd)asdf:

反向引用

每个分组对应着$1到$n

忽略分组

Bre(asa|sqd)(asdf)

Bre(?:asa|sqd)(asdf)

前瞻: 文本头部向尾部解析,文本尾部是前,文本头部是后,当正则匹配到时,继续向前,即文本尾部检查是否断言。后顾/后瞻方向相反,js不支持后顾。

         符合断言的是正向匹配或肯定匹配,不符合的是否定匹配或者负向匹配

         exp:正则表达式,assert:断言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值