JavaScript基础 正则表达式

正则表达式

是对象类型 英文:RegExp
作用是用来匹配字符

如何使用:

test方法的使用
reg.test( str );检测str里面有没有reg规则,有的话返回true,没有返回false

注意事项:
使用test的时候注意g的时候
例:

var str = 'get';
var reg = /get/gi;  注意如果加g全局匹配的话 第一匹配到 不会马上完 
                            get匹配到str的get  返回true 
                            但这时候不会马上停 而会再向下匹配,str里get下一个是空字符串  正则还会跟这个空字符串匹配  返回是false
console.log( reg.test( str ) )
console.log( reg.test( str ) )

例:

第一种创建写法
var  reg = /abc/; 制定出索引规则
var  str = 'abckdfirf';
alert( reg.test( str ) )
检测str里有没有abc这三个连着的字符

我们如果有一个变量要索引这个变量的值,上面是没办法传变量

第二种创建写法
var a = 'abc';
var reg = new RegExp( a ); //如果要索引一个变量一定是这样创建
var str = 'abckdfirf';
alert( reg.test( str ) )

转义符号

转义符号结合某些字母而表现出的特殊意义

1、
\d匹配一个数字( 0、1、2、3、4、5、6、7、8、9)
\D匹配一个非数字

var reg = /\d/;
var str = 'abckf3';
console.log( reg.test( str ) ) //检测出str里有没有数字

2、
\s 一个空格字符串 、tab符号 所有会产生空格的(/n /s ' ')都可以匹配出来
\S匹配非空格的字符

var reg = /\s/;
var str = 'abckf 3';
console.log( reg.test( str ) ) //检测出str里有没有空格

3、
\w 一个字母/数字/_字符 只匹配这三个类型
\W 匹配除了\w外其他都可以

var reg = /\w/;
var str = 'abckf3';
console.log( reg.test( str ) ) //检测出str里有没有字母/数字/_字符 

4、
\b 一个单词边界 /边词符号(匹配一个单词)
\B 除了\b外的

var reg = /aLi/;
var str = 'aLikkkk is a man';
reg.test( str )//这里就匹配aLi有这三个字符(不严谨)

现在要只匹配单单aLi有这个单词
var reg = /\baLi\b/;
var str = 'aLikkkk is a man'; 
reg.test( str ) //这里匹配不行 aLikkkk 包含在里面 不是一个单词
只有当aLi 一个单词出现时才会匹配

var str = 'aLi kkkk is a man';  //要有边界
(单词边界:起始位置、空格、所有除了\w之外的字符都可以( + - 汉字))
var str = 'aLi汉kkkk is a man'; 

转义符号

展现出某个具有特殊意义的字符
1、把一个具有特殊意义的字符变得没有特殊意义

var str = '\'';
alert( str )\\ 这里弹出'

var str = '\\'
alert( str ) 这里弹出 \

注意一个\转义符号控制一个转义字符
如果要输出\\\
var str = '\\\\\\';
alert( str )

var str = '\"\"\" '
alert( str ) \\ """

2、和一些单词结合有换行或着制表符的意思 \n(换行) \r(换行) \t(制表符)

var str = '阿\n里';
alert( str );
image.png
var reg = /\//,
    str = '/';
    alert( reg.test( str ))

数量词

使用方法:
字符串.match( 正则 )
将匹配成功的内容整合成数组返回,匹配不成功返回null

var reg = /cg/;
var str = 'abcggggg';
console.log(    str.match( reg )    )
image.png
var reg = /\d\d\d/, //有几个数字就要有几个\d
    str = 'abcgggg225gcg';
    console.log( str.match( reg ))
image.png

我们如果不知道有几个数字呢

+ :匹配大于等于1个 ,尽可能多的匹配

? :没有或着1个的匹配

* :至少0个

{n,m} :常规数量词,n和m是自然数 n>m 限定前面有几个

{n} :常规数量词,最少有n 多于n只取到最近的n个

{n,} :常规数量词,n个到无穷大

+案例

var reg = /\d+/, //有几个数字就要有几个\d
    str = 'abcgggg288854g5655cg';
    console.log( str.match( reg ))
匹配第一个连着的数字

?案例

var reg = /a?fei/, //一定要匹配到afei  有时候我们要匹配 有a 或着没有a
    str = 'fei';
    console.log( str.match( reg ))
image.png
var reg = /a?fei/, //一定要匹配到afei  有时候我们要匹配 有a 或着没有a
//?只针对于问号前面的那个单位起作用
    str = 'aaaaaafei';
    console.log( str.match( reg ))
只能匹配到一个a

?只针对于问号前面的那个单位起作用

* 案例

var reg = /a*fei/, 
    str = 'aaaaafei';
    console.log( str.match( reg ))
匹配到所有的a

{n,m}案例

var reg = /a{2,5}fei/, //限定匹配a有要2到5个 没有的话就null
    str = 'aaaaafei';
    console.log( str.match( reg ))

var reg = /a{2,5}fei/, 
    str = 'aaaaaaaaafei';
    console.log( str.match( reg ))
a超过5过只能匹配最近的5个

数量词的贪婪 和 惰性

贪婪:匹配最多的
惰性:匹配最少的

var str = 'AAAAABBBBCCC';
var reg = /a{0,10}/ig; 贪婪匹配 
console.log( str.match( reg ) ) 图A
原理是: a先取10个 去匹配 看str里有没有  如果没有 就变成 9  8 7 6 5 
                到5时可以匹配成功 就取 AAAAA  
                下来和B匹配  匹配量词可以取到0  B就会匹配成   ' '空字符 ....

var str = 'AAAAABBBBCCC';
var reg = /a{0,3}/ig; 贪婪匹配 
console.log( str.match( reg ) ) 图A
原理是: a先取10个 去匹配 看str里有没有  如果没有 就变成 9  8 7 6 3 
                到3时可以匹配成功 就取 AAA     
                str 看成被取走AAA(原str不会改变)  AABBBBCCC
                 下来对 AABBBBCCC  就可以取到AA 
                下来和B匹配  匹配量词可以取到0  B就会匹配成   ' '空字符 ....

var str = 'AAAAABBBBCCC';
        var reg = /a{1,3}?/gi; //惰性匹配
        console.log( str.match( reg ) ) //图C
原理:惰性匹配规则a取1个去匹配 
          str第一就是A 匹配成功 AAAABBBBCCC
          再继续匹配 A 匹配成功 AAABBBBCCC
          再继续匹配 A 匹配成功 AABBBBCCC
          再继续匹配 A 匹配成功 ABBBBCCC
          再继续匹配 A 匹配成功 BBBBCCC
          下来就B就不符合  匹配不成功  
          就停了
图A

图B

图C
var str = '1245874';
var reg = /\d{2,3}; //默认是贪婪匹配 
console.log( str.match( reg ) ); (图一)

var str = '1245874';
var reg = /\d{2,3}?/; //?变成惰性匹配 
console.log( str.match( reg ) ); (图二)

var str = 'aa21231212154121123';
var reg = /aa\d+123/; //默认是贪婪匹配
console.log( str.match( reg ) );(图三)

var str = 'aa21231212154121123';
var reg = /aa\d+?123/; //惰性匹配
console.log( str.match( reg ) );(图四)
图一
图二

图三
图四
<script>
       var str = 'aaaabbbbdddd';
       var reg = /a{1,5}/g;//贪婪匹配
       console.log( str.match( reg ) );
    </script>  (图五)

<script>
       var str = 'aaaabbbbdddd';
       var reg = /a{1,5}?/g; //惰性匹配
       console.log( str.match( reg ) );
    </script>  (图六)

<script>
       var str = 'aaaabbbbdddd';
       var reg = /a??/g; //第一个?是指 {0,1}
       console.log( str.match( reg ) );
    </script> 图七
图五

图六

图七

匹配的是0到1个 ?是惰性 这里会取0个去匹配 取' '字符去匹配

修饰符

i:不区分大小写
g: 全局匹配,匹配成功不会结束,只到最末尾才结束
m: 换行匹配(默认不换行)

g案例

 var str = '一狗:10,二狗:12,三狗:13';
 var reg = /\d+/; //只匹配一个就结束
 console.log( str.match( reg ) );
image.png

匹配全部

 var str = '一狗:10,二狗:12,三狗:13';
 var reg = /\d+/g;  //匹配全部 得到标准的数组
 console.log( str.match( reg ) );
标准的数组

i案例

var str = 'aabc';
var reg = /AB/; //匹配不到
console.log( str.match( reg ) );

var str = 'aabc';
var reg = /AB/i; //匹配到 得到的类数组
console.log( str.match( reg ) ); (图一)

var str = 'aabc';
var reg = /AB/ig; //匹配到 得到的数组
//修饰词可以多个  放在一起
console.log( str.match( reg ) );(图二)
图一

图二

字符集

匹配数字或字母的范围 (第一功能)
[0 - 9]区间可以拆分 (常用)可以看成 0|1|2|3........9
[a - z]区间可以拆分 (常用) 可以看成 a|b|c|d........z
[A - Z]区间可以拆分 (常用) 同上
[0 - z] 匹配数字跟字母 根据ANSI码来排的

[ a - Z ] 不能拆分 不能跨区间

var str = '0123456789';
var reg = /[2-8]/;//只能匹配到一个
console.log(  str.match(reg)  ) 
只匹配到一个
var str = '0123456789';
var reg = /[2-8]/g;//全局 匹配到所有
console.log(  str.match(reg)  ) 
image.png
var str = '0123456789';
var reg = /[2-8]{2}/g;//全局 匹配2个2个
console.log(  str.match(reg)  ) 
image.png
var str = 'abcdefghijklmnzofjf';
var reg = /[a-g]/g;
console.log(  str.match(reg)  )
image.png
var str = 'abcdefghijklmnzofjf';
var reg = /[a-g]{2}/g;
console.log(  str.match(reg)  )
image.png
var str = 'ab58jk85AAo-fjf';
var reg = /[a-z]/ig; //i不区分大小写 (代表所有大小写字母)
console.log(  str.match(reg)  )
image.png

或者 | 的功能

匹配 a 或着 g
var str = 'abcdefghijklmnzofjf';
var reg = /[ag]/g;
console.log(  str.match(reg)  )
image.png
var str = 'ab58jk85AAofjf';
var reg = /[0-9a-zA-Z]/g;//匹配数字跟所有字母
console.log(  str.match(reg)  )
image.png

注意如果要匹配-要转义

var str = 'ab58jk85AAo-fjf';
var reg = /[0-9a-zA-Z\-]/g;
console.log(  str.match(reg)  )
image.png

配合内部 ^ 除了的意思 只能写在第一位
放外面 reg = /a^/

var str = 'ab58jk85AAo-fjf';
var reg = /[^\d]/g; //除了数字外     汉字 + ,字母...都可以匹配得到
console.log(  str.match(reg)  )
image.png

字集

() 匹配 (一个整体)匹配里面这个整体

var str = 'ab58jkab85AAo-fjf';
var reg = /(ab)+(c)+/gi;
console.log(  str.match(reg)  )
image.png

整体或着 |
/acb|d/ 表达的意思 是abc或着d 匹配abc 或着d

var str = 'abcfd-fjf';
var reg = /abc|d/g;
console.log(  str.match(reg)  )
image.png

如果要匹配 abc 或着 abd

    var str = 'abdfdabc-fjf';
    var reg = /ab[cd]/;
    var x = str.match(reg);
    console.log(  x )
image.png
var str = 'abdfdabc-fjf';
var reg = /ab(cc|d)/g; //abcc 或 abd
var x = str.match(reg);
console.log(  x )
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 3,981评论 0 20
  • 本文译自 制作正则引擎的作者 Jan Goyvaerts 为工具 RegexBuddy 写的教程版权归原作者所有注...
    极客圈阅读 3,259评论 0 25
  • 1. 概述 正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符...
    JRG_Orange阅读 2,509评论 0 50
  • \ :将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,"n"匹配字符"n"。"\n"匹配换行符。序列...
    小沙鹰168阅读 532评论 0 1
  • 啊~偏爱这些瑰丽绚烂的图o(≧v≦)o 深橘色的枫叶落了,蓝绿色的湖面上荡开层层涟漪。日光透过树梢投下斑驳的阴影,...
    面团要练用词精准度阅读 219评论 0 1