正则表达式

反斜杠

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

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

原文地址:https://www.cnblogs.com/freesfu/p/10245502.html