html 中的正则(基础)

正则表达式

(1). 什么是正则表达式就是专门规定一个字符串中字符出现的规律的一套规则

(2). 何时: 2大类场景

a. 验证字符串格式

b. 查找敏感词

 

如何在js中创建正则表达式,用于查找和匹配: 2

 

(1). 标准写法

 

a. var 变量=new RegExp("正则表达式", "ig")

 

          创建

 

 正则表达式类型的对象

 

              "i" - 忽略大小写

 

  "g"- 全部

 

b. 何时今后只要正则表达式不是固定的需要根据其他变量值和数组内容动态生成只能用new RegExp()

(2). 简写

  js地盘   | 正则地盘|   js地盘

a. var 变量=/  正则   /ig ,其实就是new RegExp的简写

b. 问题: //之中是正则表达式的地盘只能写正则表达式的语法不认识js的任何语法

c. 解决

1). 只有写死的正则表达式才能用//创建

比如手机号身份证号邮箱...

2). 如果正则表达式不是固定的需要根据其他的变量或数组动态生成只能用第一种方式拼接字符串!

示例查找字符串中符合要求的敏感词

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6   <title>Document</title>
 7 </head>
 8 <body>
 9   <script>
10     var str="老师:请用小红 我的 朋友造句。小亮:小红是我的朋友。小然:朋友!小红是我的!";
11     //要求: 找出这句话中所有以小字开头的人的名字:小红或小然或小亮
12     //先创建一个正则表达式,包含要找的所有人名
13     //标准写法: 
14     //                     或   或
15     // var reg=new RegExp("小红|小然|小亮","g");
16                                     //找所有
17     //简写:
18     // var reg=/小红|小然|小亮/g;
19 
20     //用正则查找敏感词
21     // var arr=str.match(reg);
22     
23     //如果正则表达式只用一次,不会重复使用
24     //以上两句可合并为一句
25     var arr=str.match(/小红|小然|小亮/g);
26     console.log(arr);
27   </script>
28 </body>
29 </html>
30 运行结果: 
31 ["小红", "小亮", "小红", "小然", "小红"]
View Code

示例动态替换字符串中规定的敏感词:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6   <title>Document</title>
 7 </head>
 8 <body>
 9   <script>
10     //有一个数组集中保存要查找的所有敏感词,而且,要查找的敏感词列表可能随时代不同不断变化。
11     var arr1=["明月","青天"];
12     console.log(arr1.join("|"));
13 
14     //希望数组里有什么,就将什么替换为**
15     //先定义正则表达式
16     //错误: //之间不认识js语法
17     // var reg=/arr1.join("|")/g;
18     //正确: 
19     var reg=new RegExp(arr1.join("|"),"g");
20     //先有一个字符串:
21     var str="日照香炉生紫烟; 窗前明月光; 一行白鹭上青天";
22     //用正则表达式替换字符串中所有符合要求的敏感词为**
23     var str=str.replace(reg,"**");
24     //输出替换后的新字符串
25     console.log(str);
26   </script>
27 </body>
28 </html>
29 运行结果: 
30 明月|青天
31 日照香炉生紫烟; 窗前**光; 一行白鹭上**
View Code

 

验证

(1). 什么是用正则表达式检查一个字符串的格式是否符合要求

(2). 如何

a. var 验证结果=正则表达式对象.test(要检查的字符串)

b. 返回值

1). 如果要检查的字符串格式符合正则表达式要求则返回true

2). 如果要检查的字符串格式不符合正则表达式要求则返回false

(3). : test管的很松只要字符串中包含部分内容和正则表达式匹配就返回true。而不要求必须从头到尾完全匹配

比如: /\d{6}/.test("abc123456def")  返回  true

           "abcdef123456"   返回  true

(4). 解决只要验证格式在正则//前加^,后加$

(5). 原理: ^表示字符串开头 $表示字符串结尾

^$一起使用,就有"必须从头到尾完全匹配"的意思

示例验证密码格式必须是6位数字

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6   <title>Document</title>
 7 </head>
 8 <body>
 9   <script>
10     //请用户输入一个密码
11     var pwd=prompt("请输入密码");
12     //定义正则表达式规定密码必须是6位数字
13     //回顾正则: 
14     //1位数字: \d   digit 数字
15     //6位: {6}
16     var reg=/^\d{6}$/;
17     // 用正则表达式 检查用户输入的字符串
18     var result=reg.test(pwd);
19     //如果验证通过
20     if(result==true){
21       //在控制台输出密码格式正确
22       console.log(`密码格式正确`)
23     }else{//否则
24       //在控制台输出密码格式不正确
25       console.error(`密码格式不正确`)
26     }
27   </script>
28 </body>
29 </html>
View Code

既查找每个敏感词的内容又查找每个敏感词的位置

 

(1). 问题: match最大的问题是只能获得敏感词的内容无法获得敏感词的位置

(2). 解决只要既想获得敏感词内容又想获得敏感词位置都用正则表达式对象的exec()函数

(3). 如何: var 查找结果=正则表达式对象.exec(包含敏感词的字符串);

(4). 强调如果想让exec()找所有敏感词那么正则表达式对象必须加g

(6). 如果只调用一次exec(),即使正则表达式加了g,也只能返回一个敏感词的内容和位置无法找到所有敏感词的内容个位置的

(7). 解决只要希望exec()可以查找到所有敏感词的内容和敏感词的位置必须反复调用exec()——exec()自动去找下一个敏感词,直到找不到,返回null为止

(8). 固定套路

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

do{

var result=reg.exec(str);

console.log(result)

}while(result!=null); //只有本次找到了敏感词(result!=null)时才有必要继续找下一个

(8). exec()的返回值

a. 如果找到了一个敏感词

      内容    下标位置

var result=[ 

            0: "小红",  

            index: 5  

        ]

1). 如果想获得结果中的敏感词内容

标准: result["0"]    简写: result[0]

 2). 如果想获得结果中敏感词的位置

标准: result["index"]   简写: result.index

b. 如果没找到敏感词: null

示例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    var str="老师:请用小红 我的 朋友造句。小亮:小红是我的朋友。小然:朋友!小红是我的!";
    //要求: 找出这句话中所有以小字开头的人的名字和下标位置:小红或小然或小亮
    //先定义正则表达式
    var reg=/小红|小亮|小然/g;

    //for   while    do while
    //因为当拿到一个字符串时,我们无法提前预见到是否包含敏感词!所以,应该无论是否包含敏感词都能至少查找一次才行!
    do{
      //       用正则 查找 str中的敏感词
      var result=reg.exec(str);
      // console.log(result);
      //先验证只有本次找到的结果不是null时,才读取结果中的下标位置和敏感词内容
      if(result!==null){
        //标准: 
        // console.log(`在${result["index"]}位置,找到敏感词${result["0"]}`);
        //简写: 
        console.log(`在${result.index}位置,找到敏感词${result[0]}`);
      }
    }while(result!=null); //只有本次找到了敏感词,才有必要继续找下一个!
  </script>
</body>
</html>
运行结果: 
在5位置,找到敏感词小红
在16位置,找到敏感词小亮
在19位置,找到敏感词小红
在27位置,找到敏感词小然
在33位置,找到敏感词小红
View Code

 

posted @ 2021-02-16 17:29  ComeIntoBud  阅读(402)  评论(0)    收藏  举报