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

    反斜杠

    • 将具有语法意义的符号转化成为普通字符
    • 转移字符
    • 多行字符

    RegExp(正则表达式)

    创建正则表达式

    var = /aabb/; // 字面量的创建方式
    var = new RegExp(); // 构造函数的创建方式
    

    正则表达式是一个对象

    正则表达式修饰符

    • i 忽略大小写
    • g 全局匹配
    • m 多行匹配,能够识别多行

    两个方法

    • reg.test(str)
      对一个字符串对象进行判断,如果符合reg的规则就返回true,否则返回flase

    • str.match(reg)
      文本对象上的方法,参数为RegExp,返回一个数组,该数组中的值为满足reg的字符串

    表达式

    • [] 一个方括号代表一位,里面的值代表范围
      • - 代表范围,如0-9
      • ^ 放在表达式里面代表非(!)
    • () 子表达式
      • | 或子表达式

    元字符

    • w 单词字符,区间等于[0-9A-z_]
    • W 非单词字符,区间等于[^w]
    • d 数字字符
    • D 等于[^d]
    • s 空白字符 [ vf]
    • S [^s]
    •  单词边界,(原来我以为单单指的是空格,但是看起来某些情况下值的不是空格)
    • B 非单词边界
    • uXXXX unicode编码,一共16层10000-100000
    • . 是这个吗?[^ ^ ],匹配除换行符之外的任何单个字符

    量词

    贪婪匹配原则,能多就不少

    • n+ n这个变量可以出现1-infinite
    • n* n这个变量可以出现0-infinite
    • n? n这个变量可以出现0-1
    • n{X} n这个变量可以出现X
    • n{x, y} n这个变量可以出现x-y个,当y不写的时候,也就是x-infinite
    • n$n结尾的
    • ^nn开头的

    n可以是单个的字符,也可以是一串字符,他可以是一个字符变量

    RegExp方法

    • reg.lastIndex
      记录游标的位置,为reg.exec(str)方法而存在
    • reg.exec(str)
      每次调用该方法都只会返回一个值(不论你是否加上了修饰符g),并且每次调用都会依据reg.lastIndex这个值,来返回匹配的字符串

    反向引用

    var reg = /(w)1/g
    

    反向引用第一个子表达式的内容,这个反向引用只能是对于子表达式来说的,至于后面的数字表示的意思是第几个子表达式,而不是重复几个子表达式。。。

    var str = "aabb";
    var reg = /(w)1(w)2/g
    

    exec方法会记录每个子表达式的匹配的内容,以及每次匹配开始的起点

    string方法

    str.search(reg)方法返回匹配字符串的位置,加g或者不加g都是一样的,都是只会返回第一次匹配字符串的起始位置

    • str.split(str)
      里面可以传正则表达式
    • str.replace(a, b)
      如果参数b不是正则表达式的话,那么只能替换匹配的第一个字符串
      参数b的数据格式只能为字符串,其中通过$符号可以选择子表达式
    str.replace(reg, function($, $1, $2) {
        return $2+$2+$1+$1;
    })
    
    参数`b`作为一个函数的话,可以接受参数,其中`$`值为匹配正则表达式的字符,`$1` `$2`则分别是第一个子表达式和第二个子表达式
    

    正向预查

    var reg = /a(?=b)/g // 选择后面接字符b的a
    

    b只参与选择的修饰而不参与选择

    • ?=b 值为a
    • ?!b 值非a

    打破贪婪匹配

    量词的后面加一个问号,可以打破贪婪匹配的原则,能少就不会多
    var reg = /a*?/ 匹配0个a,也就是空的字符串
    var reg = /a+?/ 能匹配到多个a的u也只匹配1个a

  • 相关阅读:
    解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
    qemu vm setup network(ssh) with buildroot
    C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size
    C 利用strtok, feof 截取字符串
    LINUX C: 获取本地指定网卡的IP地址
    C语言比较好的风格梳理
    perf-perf stat用户层代码分析
    内核调试-perf introduction
    内核调试-ftrace introduction
    【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)
  • 原文地址:https://www.cnblogs.com/freesfu/p/10245502.html
Copyright © 2011-2022 走看看