js中正则表达式小计

js中的正则表达式

正则表达式:用于匹配字符串中 字符组合 的模式。

js中的正则表达式可以用于RegExpexectest方法, 以及 StringmatchmatchAllreplacesearchsplit方法。

1. 创建正则表达式

  1. 使用正则表达式字面量创建

    var re = /ab+c/;
    
  2. 使用**RegExp**对象的构造函数

    var re = new RegExp("ab+c");
    

2. 正则表达式中的特殊字符

  1. 表示字符

    字符含义
    \d匹配一个数字
    \D匹配一个非数字
    \w匹配一个单字字符(数字、字母或下划线)
    \W匹配一个非单字字符(非数字、字母或下划线)
    \s匹配一个空白字符(空格、制表符、换页符、换行符)
    \S匹配一个非空白字符(非空格、制表符、换页符、换行符)
    .小数点。默认匹配除换行符之外的任何单个字符
    \① 配合字母表示特定含义;如:\d \w等
    ② 在特殊字符前表示下一个字符不是特殊字符,按字面意思理解
  2. 表示数量(量词)

    字符含义
    +匹配前面一个表达式一次或多次
    *匹配前一个表达式0次或多次
    {n}n为正整数,匹配前面一个字符刚好出现 n 次
    {n, }n为正整数,匹配前面一个字符至少出现 n 次
    {n, m}n 和 m 都是整数,匹配前面的字符至少 n 次,最多 m 次
    匹配前一个表达式 0 次 或 1 次。等价于 {0, 1}
  3. 其他特殊字符

    字符含义
    ^① 以其后的字符开始
    $以其前面的字符结尾
    [xyz]一个字符集合。匹配集合中的任意一个字符,可以使用 **-**来指定范围。如:[0-9] 表示匹配 0-9 的任意一个数字
    [^xyz]一个反向字符集合。匹配任何没有包含在方括号中的字符,可以使用 **-**来指定范围。如:[ ^0-9 ] 表示匹配 除0-9 的任意一个字符
    x | y匹配 x 或者 y
    (? : x)其后的量词可以作用于整个模式 x
    x(?=y)匹配 x ,其后面的模式为 y
    (?<=y)x匹配 x ,x 前面的模式为 y
    x (?!y)匹配 x ,仅当 x 后面的模式不为 y
  4. 规则末尾的修饰符

    字符英文含义
    gglobal全局匹配
    iignoreCase忽略大小写匹配
    mmultiline换行匹配

3. 使用正则表达式的方法

  1. 正则对象的方法

    • test()
    // test()  判断字符串中是否 含有 符合规则的 某个或某段字符  有=> true, 没有=>false
    
    var str = "good good study , Day dAy up";
    var reg = /day/i;
    
    var result = reg.test(str);
    console.log(result);		// true
    

    注意:

    // 正则对象存在属性 lastIndex,会记录每一次匹配符合规则的第一个字符的下标,下一次再调用 test() 方法,会从 记录的 lastIndex 开始往后查找,默认为 0
    
    var str = "good good study , Day dAy up";
    var reg = /day/ig;
    
    console.log(reg.lastIndex);    // 0
    
    var result = reg.test(str);
    console.log(result, reg.lastIndex);		// true  21
    
    var result = reg.test(str);
    console.log(result, reg.lastIndex);		// true  25
    
    var result = reg.test(str);
    console.log(result, reg.lastIndex);		// false  0
    
    var result = reg.test(str);
    console.log(result, reg.lastIndex);		// true  21
    
    • exec()
    // exec  类似match方法  将符合规则的某个或某段字符提取出来放到数组中(始终只匹配一次)
    
    var str = "good good study , Day dAy up";
    var reg = /day/i;
    
    var arr = reg.exec(str);
    console.log(arr);		// test.html:56 ["Day", index: 18, input: "good good study , Day dAy up", groups: undefined]
    
  2. 字符串的方法

    • str.match(reg)

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/match

      // 参数:reg(正则表达式对象)
      // 如果传入一个非正则表达式对象,会隐式的转换为一个正则对象,如果不输入参数,会返回 包含空字符串的数组 [""]
      
      // 返回值:
      // 如果规则包含 g,返回与完整正则表达式匹配的所有结果
      // 如果不包含 g,返回第一个完整匹配及其相关的 捕获组 (捕获组:(x) x 模式的字符集合)
      
      var str = 'For more information, see Chapter 3.4.5.1';
      var re = /see (chapter \d+(\.\d)*)/i;
      var found = str.match(re);
      
      console.log(found);
      
      // logs [ 'see Chapter 3.4.5.1',
      //        'Chapter 3.4.5.1',		// 捕获组
      //        '.1',						// 捕获组
      //        index: 22,
      //        input: 'For more information, see Chapter 3.4.5.1' ]
      
      // 'see Chapter 3.4.5.1' 是整个匹配。
      // 'Chapter 3.4.5.1' 被'(chapter \d+(\.\d)*)'捕获。
      // '.1' 是被'(\.\d)'捕获的最后一个值。
      // 'index' 属性(22) 是整个匹配从零开始的索引。
      // 'input' 属性是被解析的原始字符串。
      
    • str.matchAll(reg)

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll

      // 参数:reg(正则表达式对象)
      // 如果传入一个非正则表达式对象,会隐式的转换为一个正则对象
      注:RegExp必须是设置了全局模式 g 的形式
      
      // 返回值:
      // 一个迭代器:包含所有匹配正则表达式的结果及分组捕获组的迭代器
      
      const regexp = /t(e)(st(\d?))/g;
      const str = 'test1test2';
          
      const array = [...str.matchAll(regexp)];
          
      console.log(array[0]);
      // expected output: Array ["test1", "e", "st1", "1"]
          
      console.log(array[1]);
      // expected output: Array ["test2", "e", "st2", "2"]
      
    • str.replace(regexp|substr, newSubStr|function)

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace

      // 参数:
      // regexp:正则表达式对象
      // substr:需要替换的字符串
      
      // newSubStr:新的字符串
      // function:接收一个函数,函数的返回值作为替换的字符串
      
      // 返回值:
      // 替代之后的新字符串
      
      var str = 'Twas the night before Xmas...';
      var newstr = str.replace(/xmas/i, 'Christmas');
      console.log(newstr);  // Twas the night before Christmas...
      
    • str.search(reg)

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/search

      // 参数:reg(正则表达式对象)
      // 如果传入一个非正则表达式对象,会隐式的转换为一个正则对象,如果不输入参数,会返回 0 ("number")
      
      // 返回值:
      // 如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1。
      
      var str = "hey JudE";
      var re = /[A-Z]/g;
      var re2 = /[.]/g;
      console.log(str.search(re)); // returns 4, which is the index of the first capital letter "J"
      console.log(str.search(re2)); // returns -1 cannot find '.' dot punctuation
      
    • str.split(reg)

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/split

      // split()  字符串的分割 (用特定的字符将字符串 分割为数组)  
      
      var str = "a-b-c-d-e-f";
      var arr = str.split("-");
      // ["a", "b", "c", "d", "e", "f"]
      
      var arr = str.split("");  // 任意两个字符之间 分割
      // ["a", "-", "b", "-", "c", "-", "d", "-", "e", "-", "f"]
      
      var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ";
      console.log(names);
      // Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand 
      
      var re = /\s*(?:;|$)\s*/;		// 匹配 左边不限数量空格,中间为 ; 或 $ ,右边不限数量的空格
      var nameList = names.split(re);
      console.log(nameList);
      // [ "Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand", "" ]
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值