Javascript 正则表达式 RegExp

本文详细介绍了正则表达式的各种特性及应用场景,包括贪心与非贪心模式、特殊符号的功能、字符集与反字符集的使用方法、边界与非边界的概念、以及如何使用反向引用等功能。

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

其实正则表达式核心部分就是:有穷自动机(DFA或NFA,学过编译原理的应该比较清楚。

正则表达式:reg
    字符串:str
reg.exec(str); 等同 str.match(reg);,且返回一个数组。

下面是查看一些资料总结(有删减),也用来提示自己:

*表示0次或者多次,等同于{0,} 
+表示一次或者多次,等同于{1,} 
?表示0次或者1次,等同于{0,1} 

1、贪心模式
只要在合法的情况下,它们会尽量多去匹配字符。
例:reg = /c{3,4}/;
    str='ccccTest';
    str.match(reg);//"cccc"
    能匹配四个的时候,正则绝对不会去匹配三个。

2、非贪心模式
如果我们希望正则尽量少地匹配字符,可以在表示数字的符号后面加上一个?。
组成如下的形式:
{n,}?, *?, +?, ??, {m,n}?

注意:贪心、非贪心模式,是在模式匹配之后再做判断的(我的理解)。

3、/^开头,结尾$/

4、点‘.’
‘.’会匹配字符串中除了换行符\n之外的所有字符

5、正则表达式中的或,“|“
例:reg = /^b|c.+/;
    str='bbs.blueidea.com';   //匹配开头的b或者是c.+
     
6、括号
正则表达式内括号里写的内容会被认为是子正则表达式,所匹配的结果也会被记录下来供后面使用。
例:reg = /^(b|c).+(c|b)/;
    str='bssssssscddddd';
    str.match(reg);//return  ["bsssssssc", "b", "c"]

不记录子正则表达式的匹配结果
使用形如(?:pattern)的正则就可以避免保存括号内的匹配结果。
例:reg = /^(?:b|c).+/;
    str='bbs.blueidea.com';
    str.match(reg);//return  ["bbs.blueidea.com"]

正向预查
(1)形式:(?=pattern)
要匹配的字符串,后面必须紧跟着pattern!
例:reg = /cainiao(?=8)/;
    str='cainiao8';
    str.match(reg);//return  ["cainiao"] 
需要注意的是,括号里的内容并不参与真正的匹配,只是检查一下后面的字符是否符合要求而已,例如上面的正则,返回的是cainiao,而不是cainiao8。
(2)形式(?!pattern)和?=恰好相反,要求字符串的后面不能紧跟着某个pattern

7、字符集合[abc]
   [abc]表示a或者b或者c中的任意一个字符。
   [a-z],[A-Z],[0-9],分别表示小写字母,大写字母,数字。
例:reg =  /^[a-zA-Z][a-zA-Z0-9_]+/;
 
8、反字符集合[^abc]
^在正则表达式开始部分的时候表示开头的意思,例如/^c/表示开头是c;
 但是在字符集和中,它表示的是类似“非“的意思

9、边界与非边界
\b表示的边界的意思,也就是说,只有字符串的开头和结尾才算数。例如/\bc/就表示字符串开始的c或者是结尾的c。
与\b对应\B表示非边界。

10、数字与非数字
\d表示数字的意思,相反,\D表示非数字

11、空白
直接量字符:
\f匹配换页符
\n匹配换行符
\r匹配回车
\t匹配制表符(Tab键)
\v匹配垂直制表符。
注意:以上5种字符只需要在字符串中使用一个斜杆,例:str="test\nbbs";
\s匹配单个空格,等同于[\f\n\r\t\v]。

12、单词字符
\w表示单词字符,等同于字符集合[a-zA-Z0-9_] 
\W表示非单词字符,等效于[^a-zA-Z0-9_] //不要看少了下划线

13、反向引用 这个挺好用
形式如下:/(子正则表达式)\1/
例1:reg = /(\w)\1/;
    str='blueidea';
    str.match(reg); //return null。
    这里的“\1”就叫做反向引用,它表示的是第一个括号内的字正则表达式匹配的内容。在上面的例子中,第一个括号里的(\w)匹配了b,因此“\1”就同样表示b了,在余下的字符串里自然找不到b了。
例2:reg = /(\w)(\w)\2\1/;
     str='woow';
     str.match(reg); //return ["woow"]

14、匹配元字符
则表达式中都有一定的特殊含义,类似这些有特殊功能的字符都叫做元字符。
例:reg = /c\*/;
    str='c*';
    str.match(reg); //return ["c*"]

15、正则表达式的修饰符
(1)全局匹配,修饰符g(匹配所有的子模式)          
如果正则表达式没有设置g,那么exec方法不会对正则表达式有任何的影响,如果设置了g,那么exec执行之后会更新正则表达式的lastIndex属性,表示本次匹配后,所匹配字符串的下一个字符的索引,下一次再用这个正则表达式匹配字符串的时候就会从上次的lastIndex属性开始匹配。
例:var reg = /b/g;
    var str ='bs.ssblueidea.com';
    var c = reg.exec(str);  //c.index=0;
    var d = reg.exec(str);  //d.index=5;

(2)不区分大小写,修饰符i
形式:/pattern/i

(3)行首行尾,修饰符m
形式:/pattern/m
m修饰符的作用是修改^和$在正则表达式中的作用,让它们分别表示行首和行尾。
例:var reg = /^b/m;
    var str = 'test\nbbs';
匹配到b,因为加了m修饰符之后,^已经表示行首,由于bbs在字符串第二行的行首,所以可以成功地匹配。


对于正则表达式,有很多应用
例:
   替换字符串str中a或A为B
   var str ="luafengAaA";
   var result = str.replace(/a/gi,"B");
   alert(result);//"luBfengBaB"


RegExp方法
    test:仅仅检查是否能够匹配str,并且返回布尔值以表示是否成功。 
    exec:检查是否能够匹配str,并且返回匹配值。
    String方法
    match:与正则表达式的exec方法类似,该方法同样返回一个类似数组的对象。
    replace:形式:str. replace (reg,’new str’);
    它的作用是将str字符串中匹配reg的部分用’’new str”部分代码,值得注意的是原字符串并不会被修改,而是作为返回值被返回。
    例 :var reg =  /(\w+)\s(\w+)/;
         var str = 'one two';
         var newStr =  str.replace(reg,'$2 $1');
         //结果为:two one,也就是空格前后的单词被调换顺序了。
    注意:由于在替换文本里$有了特殊的含义,所以我们如果想要是用$这个字符的话,需要写成$$。

    search:返回正则表达式第一次匹配的位置
    split:分割返回数组


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值