正则表达式常用方法使用说明

字符串方法

search() 方法用于检索字符串中指定的子字符串,也可以使用正则表达式搜索,返回值为索引位置

let str = "baidu.com";
// 字符串搜索
console.log(str.search("com")); // 6
// 正则搜索
console.log(str.search(/\.com/i)); // 5

match

简单的搜索字符串

let str = "baidu.com";
// 字符串搜索
console.log(str.match("coma"));
// 使用正则搜索
console.log(str.match(/com/));
// 返回结果 如果没有匹配到返回null
// {
//   0: "com", // 匹配的结果
//   groups: undefined, // 原子组
//   index: 6, // 出现的位置
//   input: "baidu.com", // 被查询的字符
// }

如果使用 g 修饰符时,就不会有结果的详细信息了(可以使用exec或matchAll),下面是获取所有h1~6的标题元素

<body>
  <h1>111</h1>
  <h2>222</h2>
  <h3>333</h3>
  <script>
    let body = document.body.innerHTML;
    let result = body.match(/<(h[1-6])>[\s\S]+?<\/\1>/g);
    // 返回结果 ['<h1>111</h1>', '<h2>222</h2>', '<h3>333</h3>']
    console.log(result);
  </script>
</body>

matchAll

在新浏览器中支持使用 matchAll 操作,并返回迭代对象。

const str = "baidu.com";
const reg = /[a-z]/ig;
const arr = []
for (const iterator of str.matchAll(reg)) {
  console.log(iterator);
  arr.push({
    ...iterator
  })
}
/**
 * 返回RegExpStringIterator对象 
 * 需使用for of拿取对应的值 
 * 每一项的数据结构['u', index: 4, input: 'houdunren', groups: undefined] (与match类似)
 */
console.log(str.matchAll(reg));
console.log(arr);

split

用于使用字符串或正则表达式分隔字符串

// 使用字符串分隔日期
let str1 = "2023-02-12";
console.log(str1.split("-")); //["2023", "02", "12"]
// 如果日期的连接符不确定,那就要使用正则操作了
let str2 = "2023/02-12";
console.log(str2.split(/-|\//)); //["2023", "02", "12"]

replace

replace 方法不仅可以执行基本字符替换,也可以进行正则替换,下面替换日期连接符

let str = "2023/02/12";
console.log(str.replace(/\//g, "-")); //2023-02-12

替换字符串可以插入下面的特殊变量名:

变量说明
$$插入一个 "$"。
$&插入匹配的子串。
$`插入当前匹配的子串左边的内容。
$'插入当前匹配的子串右边的内容。
$n$n为第n个原子组匹配到的内容。提示:索引是从1开始

在yq的前后添加对应的内容

let yq = "11yq==";
console.log(yq.replace(/yq/g, " $$ $` $& $' $$ "));

把电话号用 - 连接

let phone = "(010)99999999 (020)8888888";
console.log(phone.replace(/\((\d{3,4})\)(\d{7,8})/g, "$1-$2"));

replace 支持回调函数操作,用于处理复杂的替换逻辑

变量名代表的值
match匹配的子串。(对应于上述的$&。)
p1,p2, ...假如replace()方法的第一个参数是一个 RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)例如,如果是用 /(\a+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+p2 就是匹配的 \b+
offset匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1)
string被匹配的原字符串。
NamedCaptureGroup命名捕获组匹配的对象

为所有标题添加上 hot 类

<body>
  <div class="content">
    <h1>百度</h1>
    <h2>baidu.com</h2>
    <h1>百度</h1>
  </div>
  <script>
    let content = document.querySelector(".content");
    let reg = /<(h[1-6])>([\s\S]*?)<\/\1>/gi;
    content.innerHTML = content.innerHTML.replace(
      reg,
      (
        search, //匹配到的字符
        p1, //第一个原子组
        p2, //第二个原子组
        index, //索引位置
        source //原字符
      ) => {
        return `
      <${p1} class="hot">${p2}</${p1}>
      `;
      }
    );
    console.log(content.innerHTML);
  </script>
</body>

正则方法

test

返回true或false,下面是检测输入的邮箱是否合法的案例

<body>
  <input type="text" name="email" />
  <script>
    let email = document.querySelector(`[name="email"]`);
    email.addEventListener("keyup", e => {
      console.log(/^\w+@\w+\.\w+$/.test(e.target.value));
    });
  </script>
</body>

exec

不使用 g 修饰符时与 match 方法使用相似,使用 g 修饰符后可以循环调用直到全部匹配完。

  • 使用 g 修饰符多次操作时使用同一个正则,即把正则定义为变量使用
  • 使用 g 修饰符最后匹配不到时返回 null

计算内容中a出现的次数

<body>
  <div class="content">
    abababab
  </div>
  <script>
    let content = document.querySelector(".content");
    let reg = /a/g;
    let num = 0;
    while ((result = reg.exec(content.innerHTML))) {
      num++;
    }
    console.log(result = reg.exec(content.innerHTML))
    console.log(`a出现${num}次`);
  </script>
</body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值