JavaScript中的正则表达式

2. 正则表达式

  1. 创建正则表达式

    • 使用构造函数

      var reg = new("正则表达式","匹配模式");
    • 使用字面量

      var reg = /正则表达式/gi;

      g表示全局匹配

      i表示忽略大小写

  2. 全局模式

    全局模式是每次测试都是从lastIndex开始测试

    不是全局模式的话,每次测试都是从开头开始测试

    lastIndex是指下一次从哪个索引开始操作

    lastIndex属性是正则表达式的

 //全局模式
    var str = "abcytABCfjAbc";
    var reg = new RegExp("abc","gi");
    console.log(reg.lastIndex);  //0
    console.log(reg.test(str));  //true
    console.log(reg.lastIndex);  //3
    console.log(reg.test(str));  //true
    console.log(reg.lastIndex);  //8
    console.log(reg.test(str));  //true
    console.log(reg.lastIndex);  //13
    console.log(reg.test(str));  //false
    // 因为测试到了最后,已经没有符合条件的了,再测的话就又是从头开始测
​
    //不是全局模式
    var str = "abcytABCfjAbc";
    var reg = /abc/i;
    console.log(reg.lastIndex);  //0
    console.log(reg.test(str));  //true
    console.log(reg.lastIndex);  //0
    console.log(reg.test(str));  //true
    console.log(reg.lastIndex);  //0
    console.log(reg.test(str));  //true
    console.log(reg.lastIndex);  //0
    console.log(reg.test(str));  //true
​
    var str = "abc";
    var reg = /abc/gi;
    console.log(reg.test(str));   // true
    console.log(reg.lastIndex);
    //这个值已经变成了3,所以下次测试一定是从下标为3的开始测,(不管字符串是否改变)
    console.log(reg.test("abc")); //false  因为这次从下标3开始测
    console.log(reg.test("abc"));

2.1 exec方法

exec方法是将符合正则表达式要求的字符串中的子字符串抽取出来,

返回的是一个数组,一个是抽取出来的子串,另外里面有4个属性:groups index input length

index表示抽取到的子串开头位置的索引

每次只抽取一个子串(除去分组之类的)

如果是有分组的情况:

var x = /boy(BOY)/ig;
var s = "Boyboy";
console.log(x.exec(s));   //"Boyboy" "boy" 
var pa = /girl(Girl)/gi;
var test = "girlGirlabdfjla Girlgirl fal girl";
var girls = pa.exec(test);
console.log(girls);  //girlGirl Girl
console.log(pa.exec(test)); //Girlgirl girl
console.log(pa.exec(test)); //null

2.2 正则表达式的一些语法

[]只匹配一个
[ab]  表示a或b
[^a]  表示非a
[^ab]  表示非a并且非b
只有在[]中^才表示非
^  表示以什么开头
$  表示以什么结尾  ^$有开头有结尾来控制数量
[a-z] 小写字母
[0-9] 数字
​
\d  表示任意数字
\D  表示非数字
\w  表示任意单词字符  数字 字母 下划线
\W  表示非任意单词字符
\s  表示空白字符  空格 换行 制表符 回车\r
\S  表示非空白字符
.   表示任意字符
\.   使用\转义, 就是普通的.
​
数量词:
    +  表示一个或多个
        (abc)+   表示至少一个abc
    *  表示0个或多个
    ?  表示0个或1个
    {n}  表示只能n个
    {n,}  表示至少n个
    {n,m}  表示至少n个至多m个

2.3 贪婪模式与懒惰模式

只有数量词才有贪婪或懒惰这个概念

默认情况下都是贪婪模式 (尽量多匹配)

在量词后面添加一个?表示懒惰模式 (尽量少匹配)

    var str = "ab12345a123";
    var reg = /(\d+)(\d+)(\d+)/gi;   //"12345"  "123"  "4"  "5"
    console.log(reg.exec(str)); //优先满足前面的组
​
    var reg = /\d*/gi;
    console.log(reg.exec(str));
    //*是会全部都取出来然后再一个一个慢慢往外吐,就吐到只剩下空串就匹配空串了

2.4 字符串中与正则有关的方法

  1. search(正则表达式) 返回的是匹配到字符串中第一个满足条件的索引 没有找到则返回-1

  2. match(正则表达式) 找到的是满足条件的所有子字符串,将他们放入一个数组中返回 不支持分组

  3. replace(正则表达式,替换成什么字符串) 找到满足条件的子字符串,然后将他们替换成参数二的字符串

  4. split(正则表达式) 在满足条件的地方切割字符串

var s = "我要吃吃吃吃饭饭啦";
var ss = s.replace(/(.)\1+/gi, "$1");  //正则搜索出来的首先是吃吃吃吃 然后替换成吃  再是饭饭,替换成饭
//\1指的是第一组的内容是什么,那么\1就是什么
var str = "我要吃吃吃吃饭饭啦"
var reg = /(.)\1+/gi;
console.log(reg.exec(str))  //"吃吃吃吃"   "吃"   
console.log(reg.exec(str))  //"饭饭"   "饭"

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值