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():查找和替换

  • 相关阅读:
    写一写这几天安卓开发遇到的坑
    安卓环境搭建
    正则表达式
    一段时间的总结
    路飞-登录页面
    路飞-腾讯云短信接口
    路飞-Redis
    路飞-git操作
    路飞-后台xadmin配置
    路飞-后台处理跨域问题
  • 原文地址:https://www.cnblogs.com/luohaoran/p/5987588.html
Copyright © 2011-2022 走看看