zoukankan      html  css  js  c++  java
  • 正则表达式基础

    先上文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions;

    正则历史:维基百科;

    接下来由很浅入浅来分类学习正则基础:

    元字符

    常用元字符 含义
    . 匹配除换行符以外的任意字符
    w 匹配字母或数字或下划线
    W 匹配不是字母、数字、下划线的字符
    d 匹配数字,相当于[0-9]
    D 匹配不是数字的字符
    s 匹配任意不可见的字符,包括空格、制表符、换行符等
    S 匹配任意可见字符
    ^ 匹配字符串开始位置
    $ 匹配字符串结束位置
    转义字符. 在非特殊字符之前的反斜杠表示下一个字符是特殊的,不能从字面上解释。相反,反斜杠也可以将其后的特殊字符,转义为字面量。

    量词

    常用量词 含义
    * 重复任意次, 相当于{0,}
    ? 重复0次或者1次, 相当于{0, 1}
    + 重复1次或者更多次,相当于{1,}
    {n} 重复n次
    {n,} 重复n次或者大于n次
    {n, m} 重复n到m次

    分支&字符集

    常用字符 含义
    x y
    [abc] 一个字符集合, 匹配方括号的中任意字符. [abc] == [a-c]
    [^abc] 一个反向字符集, 匹配任何没有包含在方括号中的字符. [^abc] == [^a-c]

    零宽断言 (lookaround assertions)

    • 也翻译成环视
    • 根据方向的不同,分为lookahead和lookbehind
    • 根据判断原则,分为肯定和否定。
    正向/预测现行/顺序
    从左到右/pattern的前面位置
    负向/回顾后发/逆序
    从右到左/pattern的后面位置
    肯定/正 (?=pattern) (?<=pattern)
    否定/负 (?!pattern) (?<!pattern)

    惰性&贪婪

    • 贪婪模式——在匹配成功的前提下,尽可能多的去匹配
    • 惰性模式——在匹配成功的前提下,尽可能少的去匹配
    • /.*bbb/g.test('abbbaabbbaaabbb1234')
    • /.*?bbb/g.test('abbbaabbbaaabbb1234')
    • 贪婪模式⽤用于匹配优先量量词修饰的⼦子表达式
    • 惰性模式⽤用于匹配忽略略优先量量词修饰⼦子表达式

    修饰符&标志

    标志 描述
    g → global 全局搜索
    i → ignoreCase 不区分大小写搜索
    m → multiline 多行搜索
    y → sticky 执行“粘性”搜索,匹配从目标字符串的当前位置开始
    u → unicode 表示按unicode(utf-8)匹配(主要针对汉字)
    s → dotAll 将字符串视为单行来匹配

    使用方法

    方法 描述
    exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
    test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
    match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
    search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
    replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
    split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。

    例:

    var myRe = /d(b+)d/g;
    var myArray = myRe.exec("cdbbdbsbz");
    
    
    var myRe = /d(b+)d/g;
    var myArray = myRe.test("cdbbdbsbz");
    
    
    var re = /w+s/g;
    var str = "fee fi fo fum";
    var myArray = str.match(re);
    
    var re = /w+s/g;
    var str = "fee fi fo fum";
    var myArray = str.match(re);
    console.log(myArray);  // ["fee ", "fi ", "fo "]
    
    var re = /(w+)s(w+)/;
    var str = "John Smith";
    var newstr = str.replace(re, "$2, $1");
    console.log(newstr);   //  "Smith, John"
    
    var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
    var pattern = /s*;s*/;
    var nameList = names.split(pattern);
    
  • 相关阅读:
    1、编写一个简单的C++程序
    96. Unique Binary Search Trees
    python 操作redis
    json.loads的一个很有意思的现象
    No changes detected
    leetcode 127 wordladder
    django uwsgi websocket踩坑
    you need to build uWSGI with SSL support to use the websocket handshake api function !!!
    pyinstaller 出现str error
    数据库的读现象
  • 原文地址:https://www.cnblogs.com/arissy/p/10046284.html
Copyright © 2011-2022 走看看