正则

正则

1.什么是正则:用来操作字符串的规则;

正则就是用来操作(校验,捕获)“字符串”的

1)校验:返回布尔值 true:符合规则 false:不合格;

2)捕获:把符合规则内容拎出来;

正则表达式:元字符 修饰符

var re=/\d+/g;

两个斜杠之间的都是元字符;

斜杠外面的是修饰符;

3.元字符包含:代表特殊含义的元字符+代表次数的量词元字符

1)代表特殊含义的元字符

\转义

|或

()小分组

. 除了\n以外的其他字符

\n 换行

\b 开头结尾和空格 匹配一个边界

^开头

$结尾

\s 空格; \S 非空格

\d 数字; \D 非数子

\w 数字字母下划线; \W 非数字字母下划线

x|y匹配x或者y中的任意一个

[a-z]字母 匹配a-z种的任意字符

[^a-z] 非字母

[abc]abc三者中的任何一个;

[^abc]除了abc三者中的任何一个;

2)代表次数的量词元字符

* 0到多

+ 1次或者多次

? 0||1次  0次或1次

{n} 正好n次

{n,} n到多

{n,m} n次到m次

4.修饰符;

g 全局       (global)

i 忽略大小写 (ignoreCase)

m 换行       (mulitiline)

分组【】 ()

5.什么时候加开头和结尾:

如果从一段字符串中,查找是否包含某个小字符-不要加开头和结尾

严格匹配,必须加开头和结尾;

6.中括号[]的用法:

1)中括号中放的类似于+,.等特殊符号都没有特殊含义;

2)中括号中不会出现两位数

7:()分组的作用:

-  可以改变正则处理时候的优先级

-  分组捕获:分组其实可以理解为大正则中分出一个小正则,在正则捕获的时候,我们不仅仅可以把大正则匹配的结果捕获到,也可以把小分组匹配的结果捕获到

-  分组引用:出现和前面分组一模一样的结果

-   \1 出现第一个和分组一模一样的内容,但是保证当前引用的分组,能够捕获到(不能加?: ?= ?!)

8.当/^$/中遇到|的时候;最好用()提高优先级; reg=/^(18|19)$/;

教验

教验

1;test()校验,因为他返回的是布尔值,所以一般用于if条件判断种,验证某一个字符串是否符合某一规则

2;exec:用来正则捕获的,可以返回一个数组,在没有小分组的情况下,数组有三项:

1)符合大正则的内容,捕获的内容

2)index:index捕获开始的索引

3)input:input是原始数组

3.正则捕获量大特性:exec

1)懒惰型:每调用一次,exec,lastIndex永远都是从0的位置开始查找

- 执行一次exec只能捕获一次,为了解决他的懒惰性,我们可以添加全局g就能解决了

- lastIndex 正则捕获的起始位置

- 第一次捕获的时候,值为0,在正则不做任何处理的情况下,我们下次捕获的时候,這个值依然是0,所以会重复捕获第一个内容

- 解决措施:添加全局g

2) 贪婪性:如果用了加号,永远拿到的是最长的值,

解决措施在+? 这样每次只能拿到一个值

4. exec和match的区别:

- macth必须要加上g,否则只捕获第一个

- match只能捕获到所有符合大正则的内容,无法拿到小分组的信息;

- 在正则没有全局g的情况下,exec和match都只会捕获1次;都能拿到小分组的信息;

- 有全局g的情况下,exec仍然能拿到小分组信息,

5. reg.replace()两个参数,参1;字符串/正则   参2;字符串 匿名函数

- 在這个匿名函数种,接受的参数,跟exec拿到的值一模一样

-  匿名函数被调用的次数,取决于前面正则匹配成功的次数

-  匿名函数中的argument[0],argument[1],第一个是获取到的大正则 第二个参数是小分组

- 在函数中,你返回的是什么,就相当于把reg正则里面的内容替换成了什么,不写return 默认返回undefined

6. macth 字符串的方法,捕获到正则匹配的结果,只要加了分组,捕获的时候,不仅把大正则捕获到,而且里面的每一个小分组,匹配的时候,也可以捕获到,如果其中某一个分组,不需要捕获,我们可以在分组的前面加上?: 只匹配不捕获

7; 1)?可有可无;

2)(?;)只匹配不捕获

3)+?解决正则的贪婪性  放在一个量词元字符后面,代表取消正则捕获时候的贪婪性

4)?=正向预查                           匹配不捕获

5)?!负向预查 不需要那个 (?!3)不能出现3 匹配不捕获

6) ? 0||1次  0次或1次 在普通的元字符后面,代表出现0-1次

8;()用法;

1)在正则中,有/^(18|19)$/,加()提高优先级

2)分组的作用

3)只匹配不捕获

4)从左往右数(  从他开始数小分组

9;谁能影响lastIndex 的值

test+g

exec+g

以上两个都必须配合g,才能实现lastIndex值的增加;

正则例子

1)手机号正则     /^1\d{10}$/

2)有效数字正则    /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/

3)验证年龄 18-65  /^((18|19)|([2-5]\d)|(6[0-5]))$/;

4)验证邮箱的正则   /^([\w.-]+)@([0-9a-zA-Z]+)(\.[a-zA-Z]{2,4}){1,2}$/

5)中文名字  /^[\u4e00-\u9fa5]{2,4}$/

6)身份证号

var reg = /^\d{17}(\d|X)$/;

var reg = /^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(\d{2})(\d)(\d|X)$/;

7)非空验证 !/^\s*$/

8)去除首尾空格 /(^ +)|( +$)/g

9)偷小说 /<[^<>]>/g; 注意:textarea 千万不要通过innerHTML取值,因为你拿不到,只能通过value才能内容; var reg=/<[^<>]+>/g

10)去除收尾空格

var reg=/(^ +)|( +$)/g;

var reg=/(^ +| +$)/g;

var reg=/(^\s+|\s+$)/g;

//去除字符串中所有的空格;

var reg=/\s+/g;

11)var reg=/^([a-z])$/

12)百度昵称英文14位,汉字七个

function chekNick(nick) {

var reg1=/^[\u4e00-\u9fa5]$/ //检测是否为中文

var reg2=/^\w$/;            //检测是否为 数字 字母 下划线

var len=0;

for (var i=0;i

var cur=nick[i];

if (reg1.test(cur)){

len+=2

}else if(reg2.test(cur)) {

len++;

}else {

len=0;

break;

}

}

if (len==0||len>14){

return false;

}

return true;

}

13)密码 数字或字母组合在一起的(6-10)位

var reg=/^(?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{6,10}$/

14)  出现一个数字,但是不能是3,然后這个机制可以出现多次

var reg=/^((?!3)\d)+$/;

myExecAll

RegExp.prototype.myExecAll=function () {

var str=arguments[0]||'';//如果第一个参数值没有传递的话,我们默认为空字符串

//正则加g才能捕获全部,没有加的话,我们只让其捕获第一个即可 this是reg g=global

if (!this.global){

return this.exec(str)

}

var ary=[]

var resZs=this.exec(str)

while (resZs){

ary.push(resZs[0])

resZs=this.exec(str)

}

return ary.length===0?null:ary

}

reg.myExecAll(str)

myMatch

String.prototype.myMatch=function(reg){

//this:字符串实例

var res=reg.exec(this);

var ary=[];

while(res){

ary.push(res[0]);

res=reg.exec(this);

}

return ary;

}

var ary=str.myMatch(reg);

console.log(ary);

回调函数

11.回调函数注意4点:

1)什么时候被调用?调用次数?

2)是否传参

3)是否改变this指向

4)是否有返回值;

//ForEach在浏览器下不兼容,我们写這个方法让他在浏览器下兼容

var ary=[12,14,19,33,22]

var obj={}

Array.prototype.myForEach=function (cb,context) {

//context代表的是this

context=context||window

//浏览器兼容,就直接使用浏览器兼容的方法

if ('forEach'in Array.prototype){

this.forEach(cb,context);

return;//阻断代码

}

//当浏览器不支持的时候,自己写兼容方法

for(var i=0;i

cb.call(context,this[i],i,this)

//改变this指向

}

}

//调用封装的myForEach這个方法

var res=ary.myForEach(function (item,index,input) {

console.log(item,index,input)

})

console.log(res)

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

推荐阅读更多精彩内容

  • --------------------------正则的作用--------------------------...
    G_whk阅读 613评论 1 5
  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 3,995评论 0 20
  • 一、正则初体验 在软件开发中,不管是Java、C#、JS、OC....基本上都会接触到正则,不过大多数人都对正则并...
    iceman_dev阅读 2,656评论 9 28
  • //正则:就是以个规则 用来处理字符串的一个规则 var reg =/\d/; reg.exec("1"); //...
    Kyle_kk阅读 699评论 0 1
  • 定义:用来处理字符串的规则 1、匹配:判断一个字符串是否符合我们制定的规则->test:reg.test(str)...
    RomainLiu阅读 636评论 0 0