正则表达式

118 阅读1分钟

转义符号

'hell\'o' //"hell'o"
'abc\\d' //'abc\d'
'a\nb' //

RegExp构造函数

字面量创建

var reg = /abc/ //正则表达式
var str = 'abc'
reg.test(str) //true

构造函数创建

var reg = new RegExp('abc','mgi') //第二个参数为属性

修饰符

//ignoreCase忽视大小写
var reg = /add/i 

//全局匹配global
var reg = /ac/g
var str = 'acacac'
str.match(reg) //['ac', 'ac', 'ac'] 如果不写g那就只有['ac']

//多行匹配
var reg = /^a/mg //找以a为开头的
var str = 'ac\na' //\n换行了,所以为两行以a开头的
str.match(reg) //['a', 'a']

基本常用

//方括号
var reg = /[123][234][56]/ 一个[]为一位
var str = '12345'
str.match(reg) //['345']

var reg = /[^2][^5]/g  //在这里^是非、除了的意思
str.match(reg) //['12','34']
//圆括号
var reg = /(a|d)/g  //a或者d
var str = 'abcd'
str.match(reg) //['a', 'd']

元字符

  • \w ➡️ [0-9A-z_]
  • \W ➡️ [^\w]
  • \d ➡️ [0-9]
  • \D ➡️ [^\d]也就是非数字
  • \s ➡️ 空白字符 [\t\n\r\e\f]
  • \S ➡️ [^\s]
  • \b ➡️ 单词边界 'abc bcd' /\bbc/ ➡️ ['bc']
  • \B ➡️ 非单词边界
  • \t 制表符 tab
  • \r 回车符
  • \f 换页
  • \n 换行
  • unicode编码
  • . ➡️ 点,匹配单个字符,除了换行和行结束符 [^\r\n]

量词

  • \n+ ➡️ {1, }
  • \n* ➡️ {0, }
  • \n? ➡️ {0,1}
  • \n{x} ➡️ x个
  • \n{x,y} ➡️ x到y个
  • xx$ ➡️ 以xx结尾
  • ^xx ➡️ 以xx开头
  • ^xx$ ➡️ 只能匹配到xx,开头结尾限死

⬆️会贪婪匹配,如果不想,后面加问号,如/a{1,3}?/,这样只会匹配一个

//匹配首位都是数字的字符
var reg = /^\d[\s\S]*\d$/  //[\s\S]*代表所有字符不限制位数的匹配
var str = '1djjslkdfj2'
str.match(reg) //能匹配到

Reg对象的属性

  • reg.global 是否有g标志
  • reg.ignoreCase 是否有i标志
  • reg.lastIndex 查找游标位置

方法

  • reg.test()
  • reg.exec() //循环匹配,需要有g标志,不然lastIndex永远是0

反向应用

  • \1 ➡️ /(\d)\1/ 反向引用匹配出来的第一个\d,后面也再次匹配同样的\d; /(\d)\1(\d)\2/不同引用需要不同数字
var reg = /(\d)\1(\d)\2/
var str = '1122'
reg.exec(str) //['1122', '1', '2', index: 0, input: '1122', groups: undefined]
//会匹配出第一个引用跟第二个引用

支持正则表达式的方法

  • split
  • match
  • search
  • replace
//aabb变成bbaa
var str = 'aabb'
var reg = /(\w)\1(\w)\2/
str.replace(reg,'$2$2$1$1') //用$符号+数字来引用
或者写函数返回字符串
str.replace(reg, function($,$1,$2){

 return $2 + $2 + $1 + $1
})

正向预查,正向断言

var str = 'abaaa'
var reg = /a(?=b)/ //跟着b的
str.match(reg) // ['a', index: 0, input: 'abaaa', groups: undefined]
var reg = /a(?!b)/ //不跟着b的
str.match(reg) //['a', index: 2, input: 'abaaa', groups: undefined]

把1000000变成100.000.000的格式

var str = '10000000'
var reg = /(?=(\B)(\d{3})+$)/g
str.replace(reg, '.')