十五、正则表达式

正则表达式是一组用于检测字符串是否符合某种规则的表达式。

15.1 定义

  • 字面量定义 /正则表达式/修饰符
    • /\d+/g
  • 构造函数定义 RegExp(正则表达式, 修饰符);
    • new RegExp(“abc”, g)
      • 第一个参数是正则表达式的表达体
      • 第二个参数是正则表达式的修饰符
        • g global 表示全局匹配
        • i ignore 表示忽略大小写
        • m multiple 表示多行匹配

15.2 组成

  • 普通字符 a b c d e f g …. 1 2 3 4 5 …. 赵、钱、孙、李….

  • 转义字符

    • \d 所有的数字
    • \D 所有的非数字
    • \w 所有的数字字母下划线
    • \W 所有的非数字字母下划线
    • \s 所有的空白符
    • \S 所有的非空白符
  • 特殊字符(元字符)
    • . 除了回车和换行之外的其它所有内容
    • () 分组 分组内是一个整体
    • [] 范围
      • [a-z]
      • [A-Z]
      • [0-9]
      • [0-9A-Za-z]
    • {} 数量
      • {10} 限定十个 不能多也不能少
      • {3,5} 最少三个 最多五个
      • {1,} 最少一个 最多无穷个
    • ? 零个或一个
      • 一个或任意个
      • 零个或任意个
    • | 或者
    • ^ 开头
    • $ 结尾

15.3 字符串方法replace

  • replace(drop, add);
    • drop 被替换下的内容
      • 可以是字符串
      • 可以是正则表达式
    • add 被替换上的内容
      • 可以是字符串
      • 可以是函数
        • 函数的返回值是被替换上的内容
        • 函数的参数
          • 第一个表示匹配到的内容
          • 第二个表示匹配到的内容的索引
          • 第三个表示原字符串
          • 如果正则表达式中有圆括号,则圆括号捕获的内容会一一对应放在第二个参数位置及后面位置 原来的第二个参数和第三个参数会向后推移
  1. 1 有如下字符串:
  2. var str = '<table><tr><td id="u{{id}}">{{id}}</td></tr><td title="{{name}}">{{name}}</td></table>';
  3. 结合对象: var user = {id: "1234", name: "tony"};
  4. 变为: <table><tr><td id="u1234">1234</td></tr><td title="tony">tony</td></table>
  5. 2 有如下字符串
  6. var url = "cid=123&type=image&startTime=2017";
  7. 请写一个函数,传入url,返回如下对象
  8. {cid: 123, type: "image", startTime: 2017}

第一题:

  1. var str = '<table><tr><td id="u{{id}}">{{id}}</td></tr><td title="{{name}}">{{name}}</td></table>';
  2. var user = { id: "1234", name: "tony" };
  3. // 正则分组捕获
  4. var str1 = str.replace(/{{(\w+)}}/g, function(match, $1) {
  5. // match 正则匹配到的字符串
  6. // $1 圆括号匹配到的部分
  7. console.log(match, $1)
  8. return user[$1];
  9. })
  10. console.log(str1)

输出:
image.png