正则表达式

//定义正则表达式的两种方式,在用构造函数的时候,有些地方是要加转义字符的。

//1、字面量。

var reg = /\bis\b/ig;

var str = "He is a good boy";

console.log(str.replace(reg, 'IS')); //He IS a good boy

//2、构造函数

var reg = new RegExp('\\bis\\b', 'ig'); //加了转义字符

var str = "He is a good boy";

console.log(str.replace(reg, 'IS')); //He IS a good boy

//正则表达式由两种基本字符类型组成:

//1.原义文本字符:代表其本身

//2.元字符:在正则表达式中有特殊含义的非字母字符

//字符类取反:^,注意:^符号只有在[]中才是取反的意思,在[]外面表示开头

//例如

//var reg = /[^\d]/ig;

//var str = '123456dsa';

//str.replace(reg,'m');//123456mmm

//test()方法用于测试字符串是否符合正则表达式,默认只要字符串中有一部分符合,就返回true,不符合返回false。

//加上^和$表示str必须从头到尾完全匹配规则,否则就是false.^表示以xxx开始,$表示以XXX结束

//\b表示单词边界 \B表示非单词边界

// var reg = /abc/ig;

// var str = "abcd";

// reg.test(str);//true

//

//var reg = /^abc$/ig;

//var str = "abcd";

//reg.test(str);//false

//1. 备选字符集:规定某*一位*字符可选的备选文字列表

// 语法:[备选字符列表]

// 强调:无论备选字符集中由有多少字符,都必须且只能选1个,一个[]只代表1位字符!

// 比如:6位数字:[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]

//2. -:如果备选字符连续,可用-表示"到"

//3. 预定义字符集:专门表示常用的连续的字符集

// \d ==>[0-9] : 1位数字

// \w ==>[0-9a-zA-Z_] : 1位数字,字母或下划线

// \s ==>[空字符] : 代表一位空字符:空格,Tab符

//

var reg = /[abcdefg]/;

var str = "a";

console.log(reg.test(str)); //true

var reg = /[abcdefg]/;

var str = "abl";

console.log(reg.test(str)); //true,因为只匹配一个字符,符合,就返回true,不管后面是怎么样的内容。

var reg = /[abcdefg]/;

var str = "lab";

console.log(reg.test(str)); //true,同上

var reg = /^[abcdefg]$/g;

var str = "ab";

console.log(reg.test(str)); //false,规则是只匹配一个字符,字符串中是两个字符,所以false

var reg = /^[abcdefg]+$/g;

var str = "ab";

console.log(reg.test(str)); //true,规则中的含义是,匹配一个或多个小写字母组成的字符串

// .:除了换行外,其他所有的字符

//

// \D,\W,\S-->除了\d,\w或\s --了解

//4. 量词:规定一个字符集出现的次数:2种

// (1)明确数量:3种:{min,max}:最少min位,最多max位

// {min,}:至少min位

// {n}:必须n位

// 身份证号:15位或者18位

// 18位时后三位: 2位数字+最后一位数字或x X,后三位可有可无,但最多出现1次

// \d{15}(\d{2}[0-9xX])?

//

// (2)不确定数量:3种:

// ? ==>{0,1}: 可有可无,最多1次

// * ==>{0,}:可有可无,多了数量不限

// + ==>{1,}:至少一次,多了数量不限

//g的作用,不加g的时候,虽然有两个 is,但找到一个以后就停止匹配了,g是global的缩写

//var reg = /is/;

//console.log(reg.global);//false

//var reg = /is/g;

//console.log(reg.global);//true

//最简单的正则表达式

var str = "He is a good boy";

var reg = /is/;

console.log(str.replace(reg, 'IS')); //ThIS is a good boy

//这样就会匹配出当前字符串中所有的is

var reg1 = /is/g;

console.log(str.replace(reg1, 'IS')); //ThIS IS a good boy

//只匹配到小写的is,i是ignoreCase的缩写,加上i表示匹配是忽略大小写

//var reg = /is/i;

//console.log(reg.ignoreCase);//true

var reg2 = /is/g;

var str = "This IS a good boy";

console.log(str.replace(reg2, 'o')); //Tho IS a good boy

var reg3 = /is/gi;

var str = "This IS a good boy";

console.log(str.replace(reg3, 'o')); //Tho o a good boy

//贪婪模式

var reg4 = /\d{3,6}/ig;

var str = "12345678";

console.log(str.replace(reg4, 'X')); //X78

//让正则表达式尽可能少的匹配,也就是说一旦成功匹配不再继续尝试,就是非贪婪模式,在量词后面加上?即可

var reg5 = /\d{3,6}?/ig;

var str = "12345678";

console.log(str.replace(reg5, 'X')); //XX78

//前瞻:在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/后瞻 方向相反

//正则表达式从文本头部向尾部开始解析,文本尾部方向称为"前",通俗的说,从头开始,向尾部搜索,比喻成走路,尾部就是前方了。

//要找的值满足查询附带的条件,例如,我要找你的哥哥。目标是哥哥,条件是你的哥哥。左面的5是哥哥,右边的5是你

var str = "4d4d4d55";

var reg = /\d(?=\d)/ig; //

str.replace(reg, 'w'); //"4d4d4dw5"

//负向前瞻

var str = "4a4b4c55";

var reg = /\d(?!\d)/ig;

str.replace(reg, 'w'); //"wawbwc5w"

//用()括起来代表分组,从左到右序号递增,对应的变量的值$1,$2,.....$n,注意:只有在字符串满足完整的正则表达式的前提下,才会匹配出子项。通俗的说,就是有了爸爸才能有儿子。

//反向引用

//match获取当前字符串中查询到的所有符合正则的内容,存放到一个数组中。

//exec 方法受参数 g的影响。若指定了 g,则下次调用 exec 时,会从上个匹配的 lastIndex 开始查找。lastIndex是当前表达式匹配内容的最后一个字符的下一个位置。 exec每次只查询字符串中一个符合正则表达式的内容,并返回其值和当前值中的子项,存放在一个数组中。不指定g的时候,索引值不变,不管调用几次,查找的都是字符串中第一个符合正则的值。

var str = "ma name is aa Aa aaa aa";

var reg = /aa/ig;

str.match(reg); //["aa", "Aa", "aa", "aa"]

reg.exec(str); //["aa"]

reg.exec(str); //["Aa"]

reg.exec(str); //["aa"]

reg.exec(str); //["aa"]

reg.exec(str); //null

reg.exec(str); //["aa"]

//test()方法exp.test(str);返回值为true和false,符合返回true,下次调用 test 时会从上个匹配的 lastIndex 开始查找。

var str = "abcd";

var reg = /\w/ig;

reg.test(str); //true,第一个匹配的是a

reg.test(str); //true,第一个匹配的是b

reg.test(str); //true,第一个匹配的是c

reg.test(str); //true,第一个匹配的是d

reg.test(str); //false,未匹配到值

reg.test(str); //true,重新开始匹配a

//加了^$,所以当前规则要求字符串完全符合正则表达式,恰好当前字符串是符合的,于是可以匹配出子项

var str = '2015-08-23';

var reg = /^(\d{4})-(\d{2})-(\d{2})$/ig;

str.replace(reg, '$1/$2/$3'); //2015/08/23

//再看这个,也 加了^$,要求字符串从头到尾完全符合正则表达式,当前字符串不符合,所以匹配不到任何值,也就没有子项。没有爸爸,也就没有儿子了。

var str = 'a2015-08-23a';

var reg = /^(\d{4})-(\d{2})-(\d{2})$/ig;

reg.test(str); //false,也就会没有匹配到任何值

str.replace(reg, '$1/$2/$3'); //"a2015-08-23a"

//去掉了^$,也就不需要字符串从头到尾完全符合正则表达式,于是就匹配到了值

var str = 'a2015-08-23a';

var reg = /(\d{4})-(\d{2})-(\d{2})/ig;

str.replace(reg, '$1/$2/$3'); //"a2015/08/23a"

//那么,我们需要证明一下它的子项有哪些,于是调用了exec函数,这个函数的作用是将匹配到的值和其中的子项放在一个数组里。

var str = 'a2015-08-23a';

var str = 'a2015-08-23a'; //["2015-08-23", "2015", "08", "23", index: 1, input: "a2015-08-23a"],这是匹配到的字符串和其子项

//于是,我们知道,他的子项$1,$2,$3分别是exec[1],exec[2],exec[3]

str.replace(reg, '$1/$2/$3'); //"a2015/08/23a"

//用子项替换当前字符串中匹配到的值(2015-08-23),也就是"a2015-08-23a"中,将"2015-08-23"替换为2015、08、23,结果为

//"a2015/08/23a"

//如果不希望捕获分组,那么,可以再分组内加上?:,像这样(?:\d{4}),这样,这个分组就不会被捕获了。

var str = 'a2015-08-23a';

var reg = /(?:\d{4})-(\d{2})-(\d{2})/ig;

var match = str.match(reg);

console.log(match); //"2015-08-23",这样,我们就得到了当前匹配到的字符串。

var exec = reg.exec(str);

console.log(exec); //["2015-08-23", "08", "23"],匹配到的字符串和其子项中,没有匹配到"2015"这一子项

//他的子项$1,$2分别是exec[1],exec[2],也就是"08"和"23"

str.replace(reg, '$1/$2'); //"a08/23a"

//这时,如果这样写:

//str.replace(reg,'$1/$2$3');

//匹配到的是"a08/23$3a",因为$3并没有值。

rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/

var str = ‘<html></html>’;

\1就是第一个子项的意思

// .代表所有字符

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

推荐阅读更多精彩内容

  • 1,正则表达式的作用:匹配一个字符串中的一些内容 2,声明和使用: 1)构造函数 var reg=new RegE...
    WDL_1a39阅读 682评论 0 1
  • 前言 作为一个程序员,要出去装逼,手中必备的技能就是正则表达式。程序员的正则表达式,医生的处方和道士的鬼画符,都是...
    Layzimo阅读 513评论 0 6
  • 假设用户需要在 HTML 表单中填写姓名、地址、出生日期等。那么在将表单提交到服务器进一步处理前,JavaScri...
    结构学AI阅读 263评论 0 0
  • 一.当孙悟空遇到荆轲 二.拼死也要靠近你——后羿与钟无艳 三.我们都是红尘中打滚的人——亚瑟与妲己 四.在我们的最...
    菱歌上下阅读 199评论 0 2
  • 时光流转,岁月如梭。行走在大街上,我不知道,这人来人往有几个人是擦肩而过之后还能再见的。我只想游走在晚上的街头,让...
    向行阅读 309评论 2 3