您现在的位置是:首页 > 正文

正则表达式

2024-02-29 13:24:48阅读 0

常用字符

 

      1.常用的元字符

代码         说明
. 匹配 除换行符以外 的任意字符
\w 匹配 字母 数字 下划线汉字
\s 匹配  任意的空白符
\d 匹配 数字
\b 匹配 单词的开始或结束
^ 匹配 字符串的开始(在集合字符里[^a]表示非(不匹配)的意思)
$ 匹配 字符串的结束
[]        

匹配[ ] 里面任意字符    范围查询

[-] 匹配一段连续内容  [3-8] :查询3-8中的字符

2.常用反义字符 

代码 说明
\W 匹配  任意不是字母、数字、下划线、汉字 的字符
\S 匹配 任意不是空白符 的字符
\D 匹配 任意非数字 的字符
\B 匹配 不是单词开头或结束 的位置
[^x] 匹配 除了x以外的任意 字符
[^aeiou] 匹配 除了aeiou 这几个字母以外的任意 字符

3.限定字符

代码 说明
* 重复 0次 更多次
+ 重复 1次更多次
重复 0次 或 1次
{n} 重复 N次
{n,} 重复 N次 更多次
{n,m} 重复 N次  m次

4.转义字符

代码 说明
. \.       取 .
* \*       取 *
\ \\       取 \

5.字符分枝

代码 说明
| 用  |  将不同条件分割开来 (不用满足不同情况的选择)

 6.字符分组

代码 说明
() 通过使用小括号()来分组

 例如: (\d\w){3}  重复匹配3次(\d\w)

7.懒惰匹配和贪婪匹配

贪婪匹配:通常的行为是匹配尽可能多的字符
懒惰匹配:有时候需要匹配
尽可能少的字符、

  • 常用的懒惰限定符
    代码 说明
    *? 重复 任意次,但尽可能少重复
    +? 重复 1次或更多次,但尽可能少重复
    ?? 重复 0次或1次,但尽可能少重复
    {n,m}? 重复 n-m次,但尽可能少重复
    {n,} 重复 n次以上,但尽可能少重复

断言:预判某个位置是某个字符。

var str6  = "1hello-world  2hello-js  3hello-html"

代码 说明 特点 举例说明
char(?=exp) 零宽正预测 预言某个字符后面出现的字符 /hello(?=-html)/g
输出-html的hello字符
char(?!exp) 零宽负预测 某个字符后面不包含指定正则的字符

/hello(?!-js)/g
输出后面不是-js的hello字符

--> hello

(?<=exp)char 零宽度正预测 查询字符左边包含指定字符

 /(?<=hello-)\w/g
显示前面包含hello- 的字符 

-->['world', 'js', 'html']

(?<!exp)char 零宽度负预测  查询字符左边不否包含指定字符

/(?<!3hello-)\w+/g  

显示显示前面不包含3hello- 的字

--> ['1hello', 'world', '2hello', 'js', '3hello', 'tml']

实际案例

1.手机号校验

规则:(第一位1开头,第二位3-9之间的数字,一共11位)

  <script>
 // /^1[3-9][\d]{9}$/   ---> \d 表示任意一个字符 等同于[0-9]
        var regPhone = /^1[3-9][0-9]{9}$/ 
        var strPhone = "1385641232";
        console.log(regPhone.test(strPhone));
  </script>

2.用户名注册

规则:(第一位以字母开头,第二位开始可以是数字、字母、下划线、-的组合,用户名的长度必须是4-8位)

<script>    
        var userName = "aa-_3b"
        var reg2 = /^[A-z][\w\-]{3,7}$/ 
        console.log(reg2.test(userName)); //以字母开头
    </script>

3.邮箱规则:

规则:

1. 开头是数字、字母、下划线(1到多位) 
=>  邮箱的名字由:“数字、字母、下划线、-,.”   -.不能连续出现也不能作为开始
2. @后面紧跟着:数字、字母(1-多位)
3.  对@后面名字的补充  
        - 多域名 .com.cn
        - 企业邮箱  => xxx@xxx.com

<script>
        /*邮箱账户:
        1.开头是数字字母下划线(1到多位)
        邮箱的名字由“数字、字母、下划线、-,.”几部分组成 ,但是- . 不能连续出现也不能作为开始
        2.@ 后面紧跟着:数字、字母 (1-多位)
        3.  对@ 后面名字的补充
            多域名 .com.cn
            企业邮箱  => xxx@ xxx.com
        */
        /*  ”zjeen-dz.mz@xxx.com.cn“
        1)^\w+ 首位出现 1次或多次 字母和数字;
        因为 - . 不能连续出现 也不能放在首位 所以需要分开写 
        2)  -?\w*       // -?出现0次或1次 \w* 字母和数字出现0次或多次
        2)  \.?\w+      // .? 出现0次或1次 \w* 字母和数字出现1次或者多次 点后面必须出现字母
        3)  @[A-z0-9]+  //@后面跟各种字母或数字 可以出现多次 
        4)  [\.A-z0-9]+    // .com.cn 
        5)  [A-z0-9] // 最后一位必须是字母或小数
        
        */
        var str = "zjeen-dz.mz@xxx.com.cn";  // ---> false 因为 - . 中间是或 所以位false
        var reEmail2 = /^\w+((-?\w*)|(\.?\w+))@[A-z0-9]+[\.A-z0-9]+[A-z0-9]$/
        console.log(reEmail2.test(str));
        var str1 = "zjeen-dzmz@xxx.com.cn"; //true
        console.log(reEmail2.test(str1));
    </script>

4.身份证号码:

规则:
1.一共是18位 
2.最后一位可能是X 

   <script>
        /*
        2.身份证验证
        一共是18位 最后一位可能是x  
        */
        var ID = "32068119980631454X";
        var reID = /\d{18}|\d{17}X/g;  //  老师写法:/\d{17[\dX]}/
        console.log(reID.test(ID));
    </script>

5.获取内容 (运用零度断言)

规则:取出电影的标题,评分,评价人数

 //3.获取内容 用断言  
        var str = '<div class="qy-player-title title-score"><h1 class="player-title play-tit-width"><span id="widget-videotitle">长津湖之水门桥</span></h1> <article class="qy-player-score"><div class="score-top"><span class="score-new">9.6分</span><span class="qy-play-icon arrow979-icon"></span><span class="score-user-num">92.9万人评分</span>'
        var titleReg = /(?<=widget-videotitle">).+(?=<\/span><\/h1> )/g
        console.log(str.match(titleReg));
        var  scoreReg = /(?<=score-new">).+(?=分<\/span><span)/g
        console.log(str.match(scoreReg));
        var articleReg = /(?<=score-user-num">).+(?=万人评分<\/span>)/g
        console.log(str.match(articleReg));

6.复杂密码校验

规则:至少包含一个大、小写字母,数字。 数字、字母下划线。4-8位

    <script>  
 // ?=. 0宽正预测,判断后面的字符是否是数字、大小写字母  不占位置
        var passwordReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\w{4,8}$/ 
        console.log(passwordReg.test ("Qa132"));
    </script>

封装函数:

      function passwordReg (str){
            var pwdReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\w{4,8}$/ ;
            return pwdReg.test(str)
        }
       console.log (passwordReg("Qa132"));

网站文章

  • java边界的list,java:不兼容类型:推理变量T具有不兼容的边界等式约束:下界:java.util.List&lt;&gt;...

    i try to get a list from a stream but i have an exception.Here is the Movie object with a list of an...

    2024-02-29 13:24:42
  • 适配器模式

    /* * 三相插座接口 */public interface ThreePlugIf { //使用三相电流供电 public void powerWithThree();}public class GBTwoPlug { //使用二相电流供电 public void powerWithTwo(){ System.out.println("使用二相电

    2024-02-29 13:24:13
  • 还不会gdb?看这一篇就够了

    还不会gdb?看这一篇就够了

    大家好,我是小李。不管是学习还是工作中,用好gdb,能让你的程序更加丝滑! gdb是什么?它有啥威力...

    2024-02-29 13:24:06
  • poj 2376 清洗的转变 set实现 (程序设计竞赛题集)

    时间限制: 1000MS 内存限制: 65536 K 共提交: 24198 接受: 6056 描述 农夫约翰分配一些他 N (1 &lt; = N &lt; = 25,000) 牛要做一些清洁家务的谷仓。他总是想要一只奶牛,工作的东西清理,已将一天分为 T 的变化 (1 &lt; = T &lt; = 1,000,000),第一次被转移 1 和最后一次是转移 T.

    2024-02-29 13:23:58
  • java数据结构书籍推荐,已拿offer附真题解析

    java数据结构书籍推荐,已拿offer附真题解析

    前言Linux 网络协议栈是根据 TCP/IP 模型来实现的,TCP/IP 模型由应用层、传输层、网络层和网络接口层,共四层组成,每一层都有各自的职责。应用程序要发送数据包时,通常是通过 socket...

    2024-02-29 13:23:27
  • 【目标检测】Cascade R-CNN: Delving into High Quality Object Detection论文理解

    【目标检测】Cascade R-CNN: Delving into High Quality Object Detection论文理解

    文章目录摘要1 介绍2 相关工作3 目标检测3.1 边界框回归3.2 分类3.3 检测质量4 Cascade R-CNN4.1 级联边界框回归4.2 级联检测5 实验结果5.1 实现细节5.1.1 b...

    2024-02-29 13:23:19
  • Hive开窗函数(窗口函数)_四大类型实战案例

    Hive开窗函数(窗口函数)_四大类型实战案例

    去年分别给大家整理了Oracle和HIve开窗函数的相关知识,文见 Hive分析函数整理(开窗函数、窗口函数) 今天再进一步整理窗口函数常用四大类型用法 测试数据集 -- 建表 CREATE DATA...

    2024-02-29 13:23:12
  • jupyter notebook 上传文件夹问题

    jupyter notebook本地直接解压缩后,只能上传单个或多个文件,多个文件夹无法上传。 直接在本地的文件夹下:C:\Users\Administrator(自己的电脑路径),直接拷贝文件夹即可。 ...

    2024-02-29 13:22:42
  • http://www.xueh188.top/index.php/archives/35/

    在 /** * 初始化事件 */ initEvent: function () {}添加table.on('tool(bsDepartmentTable)', page.option);即 init: function () { myTable.on('tool(bsEnterp...

    2024-02-29 13:22:35
  • Linked List Cycle II的总结

    Linked List Cycle II的总结

    文章目录Linked List Cycle II的总结关键知识解题思路简单做法最佳解法题目简答做法最优解法题目地址Linked List Cycle II的总结关键知识链表的处理解题思路一种简单的做法就是顺序遍历每个结点,然后每次都判断该点是否在前面遍历过的结点中,可以采用两层遍历的做法或者是采用set来存储前面的结点,然后每次在set中find这个结点。但是set会将空间复杂度大大增加...

    2024-02-29 13:22:27