zoukankan      html  css  js  c++  java
  • 《深入理解JavaScript》—— 正则表达式

    (1) 正则表达式语法:

    1. 原子:常规

    ① 特殊字符

    下面所有的字符都有特殊的意义:

    ^ $ . * + ? ( ) [ ] { } |

    ② 模式字符

    除了上述的一些特殊字符,所有字符都匹配它们自身。

    ③ 点(.)

    匹配任意的JavaScript字符(UTF-16编码单元),除了行结束符(回车符、换行符等)。要真正匹配任何字符,请使用[sS]。例如:

    var a = /[sS]/.test('
    ');
    console.log(a);  // true

    ④ 字符转义(匹配单个字符)

    ● 特殊的控制字符包括f(翻页符), (换行符), (回车符), (水平制表符),v(垂直制表符)

    ● 匹配NUL字符(U0000)

    ● 任何控制字符:cA~xZ

    ● Unicode字符转义:u0000~xFFFF

    ● 十六进制字符转义:x00~xFF

    ⑤ 字符分类转义(匹配字符集合中的一个字符)

    ● 数字: d 匹配任意数字(同[0-9]);D 匹配任何非数字(同[^0-9])。

    ● 字母数字字符: w 匹配任意拉丁文字母数字和下划线(同[A-Za-z0-9_]);W 匹配所有w不匹配的字符。

    ● 空格: s 匹配空白字符(空格、制表符、换行符、回车符、翻页符和所有Unicode空格等);S 匹配所有非空白字符。

    2. 原子: 字符类

    字符类的语法如下(《》表示内部是一个代码):

    ● [《charSpecs》] 至少匹配charSpecs中的任意一个字符。

    ● [^《charSpecs》] 匹配不属于charSpecs中的任意一个字符。

    所有字符的匹配规范如下:

    ① 源字符与自身匹配。大多数字符都会源字符。只有3个不是源字符: ] -。通常你可以通过反斜杠转义

    ② 分类转义:前面列出的任何字符转义和字符分类转义都是允许的。

    ③ 范围包括源字符或分类字符,后面跟随者一个连接符(-),之后接着源字符或分类转义。

    3. 原子: 分组

    ● (《pattern》)是捕获组。任何匹配pattern的内容都可以通过反向引用访问或作为匹配操作的结果。

    ● (?:《pattern》)是非捕获组。pattern仍旧匹配输入,但不保存捕获的内容。因此,这种分组没有数字可以引用。

    4. 量词

    量词可以跟随在任何原子(包括字符类和分组)后。

    ?  表示从未匹配或只匹配一次。

    *  表示匹配零次或多次。

    +  表示匹配一次或多次。

    {n}  表示完全匹配n次。

    {n,}  表示匹配n次或多次。

    {n,m}  表示匹配最少n次,最多匹配m次。

    5. 断言

    下面的断言,用来检测输入的当前位置。

    ^  只匹配输入的开始位置。

    $   只匹配输入的结束位置。

      只匹配单词的边界。不要与[]混淆,它匹配一个退格。

    B  只匹配非单词边界。

    (?=《pattern》)  正向肯定断言:只匹配pattern所匹配的接下来的内容。pattern只是用来向前查找,但会忽略匹配的pattern部分。

    (?!《pattern》)  正向否定断言:只匹配pattern不匹配的接下来的内容。pattern只是用来向前查找,但会忽略匹配的pattern部分。

    6. 析取(或)

    析取运算符(|)分离两个选择方案;必须匹配其中一个方案。

    析取操作符结合很弱,所以你必须小心,选择的方案不会拓展得太长。换句话说,析取操作符甚至比^和$结合更弱。

    (2) 标识

    g  给定的正则表达式可以匹配多次,他会影响几种方法,尤其是replace()

    i   试图匹配给定的正则表达式时忽略大小写

    m  在多行模式中,开始操作符^和结束操作符$匹配每一行,而不是输入的整个字符串。

    (3) 实例方法

    1. RegExp.prototype.test(): 是否存在匹配

    test()方法用来检查正则表达式是否匹配字符串str。

    2. String.pototype.search(): 匹配位置的索引

    如果存在匹配,返回发现匹配位置的索引。否则,返回值是-1。

    3. RegExp.prototype.exec(): 捕获分组

    不设置/g: 只捕获第一次匹配的分组(调用一次)。

    设置/g: 捕获所有匹配的分组(重复调用;如果没有任何匹配,返回null)。

    4. String.prototype.match(): 捕获分组或返回所有匹配的子字符串

    不设置/g: 捕获分组。

    设置/g: 返回所有匹配的子字符串的数组。

    5. String.prototype.replace():查找和替换

  • 相关阅读:
    Generate Parentheses
    Length of Last Word
    Maximum Subarray
    Count and Say
    二分搜索算法
    Search Insert Position
    Implement strStr()
    Remove Element
    Remove Duplicates from Sorted Array
    Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/luohaoran/p/5987588.html
Copyright © 2011-2022 走看看