• 正则表达式


    简介

      正则表达式(regular expression)是一种字符串匹配模式(pattern),用来搜索、替换或取出符合某个条件的子字符串。1

    语法

      正则表达式由普通字符(例如字符 a 到 z)以及特殊字符(称为“元字符”)组成。

    普通字符

      包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

    字符描述
    [ABC]匹配 […] 中的所有字符。
    [^ABC]匹配除了 […] 中字符的所有字符。
    [A-Z][A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。
    .匹配除换行符 \n 之外的任何单字符。
    [\s\S]匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。

    特殊字符

      所谓特殊字符,就是一些有特殊含义的字符。

    字符描述
    [标记一个中括号表达式的开始。
    {标记限定符表达式的开始。
    \将下一个字符标记为 特殊字符、原义字符、向后引用或八进制转义符。

    限定符

      限定符用来指定一个条件要出现多少次才能匹配。有 ? * +{n} {n,} {n,m} 共6种。

    字符描述
    ?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符
    *匹配前面的子表达式零次或多次。
    +匹配前面的子表达式一次或多次。
    {n}n 是一个非负整数。匹配确定的 n 次。
    {n,}n 是一个非负整数。至少匹配n 次。
    {n,m}m 和 n 均为非负整数。最少匹配 n 次且最多匹配 m 次。

      注意:限定符都是贪婪的,它们会尽可能多的匹配文字,在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。

    <h1>RUNOOB-菜鸟教程</h1>
    
    // 贪婪:下面的表达式匹配从开始 (<) 到 (>) 之间的所有内容。
    /<.*>/  
    
    // 非贪婪:下面的表达式只匹配 

    /<.*?>/
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    定位符

      定位符用来描述字符串或单词的边界,^$ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。

    字符描述
    ^匹配输入字符串的开始位置。在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。
    $匹配输入字符串的结尾位置。
    \b匹配一个单词边界,即字与空格间的位置。
    \B非单词边界匹配。

    选择

      () 表示捕获分组,把每个分组里的匹配的值保存起来,相邻的选择项之间用 | 分隔。
      ?: ?= ?!是非捕获元。

    字符描述
    (pattern)匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。
    (?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
    (?=pattern)正向肯定预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。exp1(?=exp2):查找 exp2 前面的 exp1。
    (?!pattern)正向否定预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。exp1(?!exp2):查找后面不是 exp2 的 exp1。
    (?<=pattern)反向肯定预查,与正向肯定预查类似,只是方向相反。(?<=exp2)exp1:查找 exp2 后面的 exp1。
    (?反向否定预查,与正向否定预查类似,只是方向相反。(?:查找前面不是 exp2 的 exp1。
    x|y匹配 x 或 y。
    \num匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,‘(.)\1’ 匹配两个连续的相同字符。
    // (?:pattern)
    industr(?:y|ies) // 比 'industry|industries' 更简略的表达式。
    
    // (?=pattern)
    Windows(?=95|98|NT|2000) // 能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。
    
    // (?!pattern)
    Windows(?!95|98|NT|2000) // 能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。
    
    // (?<=pattern)
    (?<=95|98|NT|2000)Windows // 能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。
    
    // (?
    (?<!95|98|NT|2000)Windows // 能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    反向引用

      ()将相关匹配存储到一个临时缓冲区中,所捕获的子匹配从左到右的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个。缓冲区使用 \n 访问,其中 n 为一个标识特定缓冲区的十进制数。

    // 反向引用常用于查找文本中两个相同的相邻单词。
    var str = "Is is the cost of of gasoline going up up";
    var patt1 = /\b([a-z]+) \1\b/igm; // 第二部分是对以前捕获的子匹配项的引用,\1 指定第一个子匹配项。
    document.write(str.match(patt1));
     // Is is,of of,up up
     
    var str = "https://www.runoob.com:80/html/html-tutorial.html";
    var patt1 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
    arr = str.match(patt1); // str.match(patt1) 返回一个数组,索引 0 对应的是整个字符串,索引 1 对应第一个匹配符
    for (var i = 0; i < arr.length ; i++) {
        document.write(arr[i]);
        document.write("
    "
    ); } // https://www.runoob.com:80/html/html-tutorial.html // https // www.runoob.com // :80 // /html/html-tutorial.html
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    修饰符(标记)

      标记不写在正则表达式里,标记位于表达式之外,格式 /pattern/flags

    修饰符含义
    iignore - 不区分大小写
    gglobal - 全局匹配
    mmulti line - 多行匹配
    s特殊字符圆点 . 中包含换行符 \n
    var str="Google runoob taobao runoob"; 
    var n1=str.match(/runoob/);   // 查找第一次匹配项
    var n2=str.match(/runoob/g);  // 查找所有匹配项
    
    • 1
    • 2
    • 3

    元字符

      下面是一些其他常用字符。

    字符描述
    \w匹配字母、数字、下划线。等价于’[A-Za-z0-9_]'。
    \W匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。
    \d匹配一个数字字符。等价于 [0-9]。
    \D匹配一个非数字字符。等价于 [^0-9]。
    \s匹配任何空白字符,包括空格、制表符、换页符等等。
    \S匹配任何非空白字符。

    1. 正则表达式-菜鸟教程 ↩︎

  • 相关阅读:
    机器学习——朴素贝叶斯
    hyoerf手记
    Java-序列化和反序列化
    开源大模型ChatGLM2-6B 2. 跟着LangChain参考文档搭建LLM+知识库问答系统
    用vba实现将记录集输出到Excel模板
    JS中的栈和堆
    计算机网络第三章——数据链路层(中)
    手眼标定笔记
    职场小白如何将图片转文字?这个方法建议收藏使用!
    基于nodejs+vue 中小学课程辅导系统
  • 原文地址:https://blog.csdn.net/gaofei880219/article/details/126155101