正则表达式

概述:正则表达式是运用于验证一种表达式,它在js中是一个对象,被称为正则对象,对应的正则对象存在对应相关的元字符。

正则对象的声明:

1、使用new关键词声明
//使用new关键字 g表示全局  
//第一个参数填写相关正则表达式  添加修饰符(匹配模式) g 表示 全局 i 表示 不区分大小写 m 表示换行
var regx = new RegExp('abc','g')
console.log(regx);
2、使用//来修饰 (常用的)
// 第二种声明
var regx1 = /abc/g
console.log(regx1);

正则的匹配模式:

  • g 全局匹配
  • i 不区分大小写
  • m 换行
  • s 单个匹配

正则的元字符:

1、^ 开头
// ^ 开头
var regx1 = /^a/ //表示以a开头
//字符串支持正则的四个方法 match 匹配 search 查找 split 分割 replace 替换
console.log('abc'.match(regx1));//['a']
2、$ 结尾
// $ 结尾
var regx2 = /b$/ //以b结尾
console.log('abc'.match(regx2));//null
3、[] 表示其中一个元素
//[] 表示其中任意一个元素 
var regx3 = /^[abc]$/ //以abc其中一个开头及结尾 只能匹配a 或 b 或 c
console.log('abc'.match(regx3));//null
console.log('a'.match(regx3));//['a']
var regx3 = /^[abc][12]$/ //以abc中任意一个开头及以12中任意一个结尾 只能匹配 a1 a2 b1 b2 c1 c2
console.log('a12'.match(regx3));//null
var regx3 = /^abc[abc]$/ //以abc开头以abc其中一个结尾 abca abcb abcc
4、{} 表示个数
  • {n} 表示n个
  • {n,m} 表示n个到m个
  • {n,} 表示n个到无穷个 至少要有n个
//{} 表示个数
// {1,2} 1个到2个
var regx4 = /^[abc]{1,2}$/ //匹配abc中组成的1个或者俩个组合 
//可以匹配 a b c aa ab ac bb bc ba ca cc cb
console.log('abc'.match(regx4));//null
console.log('a'.match(regx4));//['a']
console.log('ab'.match(regx4));//['ab']
//{1,} 一个及以上 至少要1个
var regx4 = /a{1,}/ //匹配一个a 或者是多个a
console.log('a'.match(regx4));//['a']
console.log('aaa'.match(regx4));//['aaa']
//{2} 表示俩个
var regx4 = /^b{2}$/ //表示俩个b
console.log('b'.match(regx4)); //null
console.log('bb'.match(regx4)); //['bb']
5、() 分组
var regx5 = /^([a][ac]){2}$/ //能匹配 aaaa acac acaa 
console.log('aaaa'.match(regx5))
console.log('acac'.match(regx5))
console.log('acaa'.match(regx5))
console.log('accc'.match(regx5))//null
6、+ 表示一个到多个
//+表示 {1,} 一个到多个
var regx6 = /^a+$/ //匹配一个a或者多个a
console.log('a'.match(regx6));//['a']
console.log('aaaa'.match(regx6));['aaaa']
7、* 表示0个到多个
//*表示{0,} 0个到多个
var regx7 = /^a*b$/ //匹配0个a或者多个a 以b结尾
console.log('b'.match(regx7));//['b']
console.log('ab'.match(regx7));//['a']
console.log('aaaab'.match(regx7));['aaaa']
8、? 表示0个到一个
//?表示0个到一个 {0,1}
var regx8 = /^a?b$/ //a可以有1个可以没有 以b结尾
console.log('b'.match(regx8));//['b']
console.log('ab'.match(regx8));//['ab']
console.log('aab'.match(regx8));//null
9、\d 表示数字 相当于[0-9] \D 表示非数字 ![0-9]
// 数字表示形式
var regx9 = /^[0-9]$/ //匹配0-9之间的数字
console.log('1'.match(regx9));//['1']
console.log('0'.match(regx9));//['0']
//第二种数字表示形式 使用\d 表示为数字 [0-9] \D 非数字
var regx9 = /^\d$/
console.log('1'.match(regx9));//['1']
console.log('0'.match(regx9));//['0']
var regx9 = /^\D$/ //非数字
console.log('1'.match(regx9));//null
console.log(' '.match(regx9));//[' ']
10、\w 表示数字字母下滑线 相当于[0-9A-Za-z_] \W表示非数字字母下滑线 ![0-9A-Za-z_]
//字母 数字 下滑线 \w 表示数字字母下滑线 \W 非数字字母下滑线
var regx10 = /^[0-9A-Za-z_]$/ //表示数字字母下滑线
console.log('1'.match(regx10));//['1']
console.log('A'.match(regx10));//['A']
console.log('a'.match(regx10));//['a']
console.log('_'.match(regx10));//['_']
console.log('?'.match(regx10));//null
var regx10 = /^\w$/
console.log('1'.match(regx10));//['1']
console.log('A'.match(regx10));//['A']
console.log('a'.match(regx10));//['a']
console.log('_'.match(regx10));//['_']
console.log('?'.match(regx10));//null
var regx10 = /^\W$/
console.log('?'.match(regx10));//['?']
console.log('a'.match(regx10));//null
11、. 表示所有的
//.表示所有的
var regx11 = /^.$/
console.log('?'.match(regx11));//['?']
console.log(' '.match(regx11));//[' ']
console.log('.'.match(regx11));//['.']
12、\s 表示空白字符 \S表示非空白字符
//空白字符 \s空白字符 \S非空白字符串 (空格 回车 制表符..)
var regx12 = /^\s$/
console.log('.'.match(regx12));//null
console.log(' '.match(regx12));//[' ']
var regx12 = /^\S$/
console.log('.'.match(regx12));//['.']
console.log(' '.match(regx12));//null

| 或者

概述:表示其中一种。

var regx = /^([ab]{2})|([12]{3})$/ //表示的是ab其中的内容构成的俩个 或者是123其中的内容构成的一个 任意其中一个
//匹配的内容 aa ab bb ba 或者是 111 121 211 122 112 222 212 221
console.log('121'.match(regx));//['121']
console.log('aa'.match(regx));//['aa']
//忽略掉后面的内容
console.log('aa1'.match(regx));//['aa']

转义

概述:就是将本身的意思显示出来去除对应元字符的功能。

  • 将需要转义的内容放到[]里面
  • 使用反斜杠来进行转义
//转义 需要匹配?或者. 
//如果直接使用?和.他会解析为元字符 需要转义 
//第一种直接把他加入中括号里面 (在中括号里面会解析为字符串)
var regx = /^[?.]$/
console.log('?'.match(regx));
console.log('.'.match(regx));
//第二种方式 使用反斜杠\ 来进行转义 转义符合
var regx = /^\?|\.$/
console.log('?'.match(regx));
console.log('.'.match(regx));

关于正则对象的属性及方法

属性:
  • lastIndex :是正则表达式的一个可读可写的整型属性,用来指定下一次匹配的起始索引。
console.log(regx.dotAll);//是否在正则表达式中一起使用"s"修饰符
console.log(regx.flags);//模式修饰
console.log(regx.global);//是否全局匹配 g
console.log(regx.ignoreCase);//是否区分大小写 i
console.log(regx.multiline);//是否换行 m
console.log(regx.unicode);//是否进行编码匹配
console.log(regx.source);//表示里面内容
console.log(regx.sticky);//黏性
方法:
  • test 测试方法,测试是否符合当前的正则表达式(符合返回true,不符合返回false)
  • exec 执行方法 (类似于match,返回一个数组,匹配不成功返回null)
var regx = /^[abc]{2}$/ //匹配ab aa ac bc bb ba ca cb cc
console.log(regx.lastIndex);//返回lastIndex表示最后的下标 他是属于可读可写 默认值为0
//传入需要匹配的字符串 匹配成功返回true 失败返回false
console.log(regx.test('ab'));//true
console.log(regx.test('aaa'));//false
regx.lastIndex = 3 //自动默认更改 设置值为0
console.log(regx.test('ab'));//true
//执行方法 exec
console.log(regx.exec('ab')); //返回一个匹配的数组 类似match方法
console.log(regx.exec('abc')); //匹配不成功返回null

String 支持正则表达式的方法

  • search 搜索 (根据对应的正则返回第一次找的下标 如果没有找到返回-1)
  • match 匹配 (根据对应的正则表达式返回匹配的数组,如果没有匹配的返回null)
  • split 分割 (根据对应正则表达式进行字符串的分割 返回一个数组 如果不能进行分割返回的也是一个数组 (数组里面只有一个元素))
  • replace 替换 (根据对应的正则表达式进行字符串的替换返回一个新的字符串 如果不能完成替换返回原本的字符串)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容