zoukankan      html  css  js  c++  java
  • 正则表达式(Regular Expression)

    正则表达式工具:http://regexper.com

     

    RegExp对象: 两种方法实例化RegExp对象

    .字面量(定义变量,var reg = /正则表达式文本/g  添加g表示匹配所有符合表达式的字符串,否则只匹配第一个符合表达式的字符串)

    .构造函数( var reg = new RegExp(‘正则表达式文本’,’修饰符’)第二个参数可有可无,据需求而定)

     

    修饰符(对象属性) :

    .g: global全文搜索,不添加,搜索到第一个匹配停止.

    .i: ignore case 忽略大小写,默认大小写敏感.

    .m:multiple lines 多行搜索,将换行符后的字符串当作新的字符串.

    .lastIndex:是当前表达式匹配内容的最后一个字符的下一个位置(即下一个开始搜索的位置)

    .source:正则表达式的文本字符串

     

    元字符查看元字符表

    字符类:

    .使用元字符[ ]来构建一个简单的类

    .表达式[abc]把字符a或b或c归为一类,表达式可以匹配这类的字符

    字符类取反:

    .使用元字符^创建 反向类/负向类

    .表达式[^abc]表示 不是字符a或b或c的内容

    范围类

    .使用[a-z]来连接两个字符表示从a到z的任意字符

    .这个是闭区间,包含了a和z本身

    .在[ ]组成的类内部是可以连写的 [a-zA-Z]

    .若是在范围内里相匹配 -符号,直接在范围后加上该符号即可ep: [a-z-]

    预定义类:

    匹配一个 ab+数字+任意字符 的字符串 ab/d.

    边界符

    ^: 以xxx开始

    $: 以xxx结束

    \b: 单词边界

    \B: 非单词边界

    量词:

     ?:出现零次或一次(最多出现一次)

    + :出现一次或多次(至少出现一次)

    *: 出现零次或多次(任意次)

    {n}: 出现n次

    {n,m}: 出现n到m次

    {n,}: 至少出现n次

    贪婪模式(默认):

    给一个范围,会尽可能多的去匹配一个字符串,ep:’12345678’.replace(/\d{3,6}/g,’p’), 会匹配到1-6,而不是1-3

    非贪婪模式:

    . 让正则表达式尽可能少的去匹配,即一旦成功匹配就不再继续尝试

    . 该模式标识,需在量词后加上

    分组:

    使用()可以达到分组的功能,使量词作用于分组

    或:使用 | 可以达到或的效果

    反向引用:$(1-n) 分别引用的是正则表达式中的(1-n)个分组

    忽略分组:不希望捕获某些分组,只需要在分组内加上?:就可以

    (注意:以上各符号需在英文输入法中输入才会起作用)

     

    . 正则表达式从文本头部向尾部开始解析,文本尾部方向,称为“前”

    前瞻:就是在正则表达式匹配到规则的时候,向前检查是否符合断言

    . 符合和不符合特定断言称为 肯定/正向 匹配和 否定/负向 匹配

    正向前瞻:exp(?=assert)  (断言部分不参与匹配,只表示一个必须符合的匹配条件)

    负向前瞻:exp(?!assert)

    后顾/后瞻:与前瞻方向相反(JavaScript 不支持后顾)

    正向后顾:exp(?<=assert)  负向后顾:exp(?<!assert)      

     

    正则表达式对象本身提供的两个方法:

    . RegExp.prototype.test(str):用于测试字符串参数中是否存在匹配正则表达式模式的字符串,如果存在则返回true,否则返回false(受lastIndex影响,有个循环过程,字符串中有多少个符合匹配的就返回多少次true,之后就返回false)

    . RegEx.prototype.exec(str):使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果,如果没有匹配的文本则返回null,否则返回一个结果数组

    -index 声明匹配文本的第一个字符的位置

    -input 存放被检索的字符串 string

    . 调用非全局的RegExp对象的exec()时,返回数组,其lastIndex不起作用

    第一个元素是与正则表达式相匹配的文本

    第二个元素是与RegExpObject的第一个子表达式(即第一个分组)相匹配的文本(如果有的话)

    第三个元素是与RegExpObject的第二个子表达式(即第二个分组)相匹配的文本(如果有的话)以此类推……

    . 调用全局RegExp对象(即加了g修饰符的)的exec()时,返回多个数组

     

    字符串对象方法:

    . String.prototype.search(reg): 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,方法返回第一个匹配结果index,查找不到返回-1

    该方法不执行全局匹配,它将忽略标识g,并且总是从字符串的开始进行检索

    . String.prototype.match(reg):将检索字符串,以找到一个或多个与RegExp相匹配的文本,如果没有找到任何匹配的文本,将返回null,否则它将返回一个数组,其中存放了与它找到的匹配文本有关的信息,返回数组的内容与exec()方法返回的数组内容相同

    返回的数组还含有两个对象属性:

    . index 声明匹配文本的起始字符在字符串的位置

    . input 声明对stringObject的引用

    如果regexp没有标志g,那么match方法只能在字符串中执行一次匹配

    如果有标志g,全局调用,找到字符串中的所有匹配子字符串,若没找到返回null,若找到了一个或多个匹配子串,则返回一个数组,数组元素中存放的是字符串中所有的匹配子串,而且也没有index属性或input属性

    . String.prototype.split(reg): 常用这个方法把字符串分割为字符数组

    ep: ‘a,b,c,d’.split(‘,’); — [“a”,”b”,”c”,”d”]

    在一些复杂的分割情况下可以使用正则表达式解决

    ep: ‘a1b2c3d’.split(/\d/);— [“a”,”b”,”c”,”d”]

    . String.prototype.replace( str/reg, replaceStr/function(1.匹配字符串match,2.正则表达式的分组内容group…,没有则就没有该参数,3.匹配项在字符串中的index,4.原字符串origin))

  • 相关阅读:
    多项式模板整理
    广大附中2019CSP模拟day6
    2019正睿CSP-S模拟赛十连测day6
    NOIP2020 游记
    NOI2020 退役记
    CSP2019 退役记
    目录
    NOI Online 提高
    后缀数组
    待学
  • 原文地址:https://www.cnblogs.com/vikeykuo/p/r_express.html
Copyright © 2011-2022 走看看