2021-08-25 正则表达式

正则就是我们定义的一个规则表达式(我们按一定的语法定义的规则)

正则表达式作用:用来匹配检测字符串

按照我们定义的规则,检测字符串是否合格


如何创建正则表达式

1. 字面量创建

var reg1 = /qwe/;


console.log( typeof reg1);  // object

console.log(reg1);

2. 内置构造函数创建

var reg2 = new RegExp('qwe');

console.dir(reg2);


正则表达式是复杂数据类型(引用数据类型)



正则表达式是检测字符串是否符合规则的

.test(参数)  参数我们要检测的字符串

语法:正则.test(你要检测的字符串);

返回值:布尔值,检测合格返回true 否则返回false


var reg = /qwe/;  // 字符串中是否有qwe字符串

var str = '1q23w34e56';

var res = reg.test(str);

console.log(res); // false

console.log(/qwer/.test('123qqqwert123')); // true


正则表达式是由文本和一些具有特殊含义的字符组成的


 元字符

1. \d  表示数字(0-9)

var reg = /\d/;   // 看字符串中是否有数字

console.log(reg.test('qwert')); // false

console.log(reg.test('qwert0')); // true

console.log(reg.test('')); // false

console.log(reg.test('1234456')); // true


2. \D  表示非数字

console.log(/\D/.test('1234567'));// false

console.log(/\D/.test('12345670o'));// true


3. \s  表示空白字符

console.log(/\s/.test('0')); // false

console.log(/\s/.test('')); // false

console.log(/\s/.test(' ')); // true

console.log(/\s/.test('12345 6')); // true

console.log(/\s/.test()); // false


4. \S  表示非空白字符

console.log(/\S/.test(''));// false

console.log(/\S/.test());// true

console.log(/\S/.test(' ')); // false

console.log(/\S/.test('1 1')); // true


5. \w 数字字母下划线

console.log(/\w/.test('!@#$-')); // false

console.log(/\w/.test('amdin123')); // true


6. \W 非数字字母下划线

console.log(/\W/.test('1234567'));// false

console.log(/\W/.test('qwert')); // false

console.log(/\W/.test('_1_2_')); // false

console.log(/\W/.test('!@#$-'));// true

console.log(/\W/.test('!@#12334$-'));// true


7. 点 .  表示非换行的字符

console.log(/./.test('\n')); // false

console.log(/./.test(' ')); // true

console.log(/./.test('q24'));// true



元字符:

\d  数字

\D  非数字

\s  空白符

\S  非空白符

\w  数字字母下划线

\W  非数字字母下划线

.   非换行字符      



限定符,帮我们限定出现的次数


1. *   0到无数次

console.log(/\d*/.test('1234')); // true

console.log(/\d*/.test('qwert'));// true


2. +   1次到无数次

console.log(/\d+/.test('1234')); // true

console.log(/\d+/.test('qwert'));// false


3. ?   只要0次或1次就可以

console.log(/\d?/.test('1234')); // true

console.log(/\d?/.test('qwert')); // true


4. {n}  只要出现连续n次就可以

console.log(/\d{2}/.test('1234')); // true

console.log(/\d{2}/.test('1qwer1')); // false


5. {n,m}  只要出现连续的n到m次

console.log(/\d{2,4}/.test('123')); // true

console.log(/\d{2,4}/.test('1234')); // true

console.log(/\d{2,4}/.test('12345'));// true

console.log(/\d{2,4}/.test('1q2w3e4r')); // false


6. {n,}  只要连续的出现n次到无数次

console.log(/\d{3,}/.test('12')); // false

console.log(/\d{3,}/.test('1234')); //  true

console.log(/\d{3,}/.test('12345'));//  true

console.log(/\d{3,}/.test('1q2w3e4r')); // false



限定符

*  0~无数次  {0,}

+  1~无数次  {1,}

?  0或1次    {0,1}

{n}  连续出现n次

{n,m}  连续出现n次到m次

{n,}  连续出现n次到无数次



  边界符,限定开头和结尾

^ 表示开头

$ 表示结尾


// 特殊符号



1. \ 转义

会将普通的字符,转为有特殊含义的字符

w普通的字符--------> \w 数字字母下划线

会将具有特殊含义的字符,转为普通的字符

. 非换行的字符------>  \. 仅仅表示点这个字符,没有特殊函数


2. - 范围

0-9 表示0到9的数字,a-z 表示所有的小写字母 A-Z 表示所有的大写字母


3. [] 表示一个字符集合,只要[]中字符集合的一个匹配就行

console.log(/^[1234]/.test('12432')); // true

console.log(/^[1234]/.test('4567www')); // true

console.log(/^[1234]/.test('567www')); // false


4. () 表示一个字符组,把小括号中的看做一个整体

console.log(/^(1234)/.test('123432')); // true

console.log(/^(1234)/.test('1235www')); // false

console.log(/^(1234)/.test('2345www')); // false


5. | 或者

console.log(/^[12|34|56]/.test('123456')) // true

console.log(/^[12|34|56]/.test('12w3456')) // true

console.log(/^[12|34|56]/.test('w3456')) // false

console.log(/^[12|34|56]/.test('322456'))// true


console.log(/^(12|34|56)/.test('123456')); // true

console.log(/^(12|34|56)/.test('1323456')); // false

console.log(/^(12|34|56)/.test('23456')); // false

console.log(/(12|34|56)$/.test('34w56')); // true

console.log(/(12|34|56)$/.test('234w56')); // false


6. [^]  表示除了[^  ]中的字符不匹配,别的都可以匹配

console.log(/[^1234]/.test('1qwee')); // true

console.log(/[^1234]/.test('qwee')); //true

console.log(/[^1234]/.test('qwee1234')); // true

console.log(/[^1234]/.test('1234')); // false

console.log(/^[^1234]/.test('1qwee')); // false


 标识符,放在正则表达式的最后面

i 表示忽略大小的匹配

g 表示全局匹配


var reg1 = /[a-z]/ig;

var reg2 = new RegExp('[a-z]','ig');

console.log(reg1,reg2);


console.log(/^[a-z]$/.test('qwee')); // false

console.log(/^[a-z]/.test('ASD')); // false

console.log(/^[a-z]/i.test('ASD')); // true

console.log(/[a-z]/ig.test('ASD')); // true



exec() 方法

正则.exec(参数)  参数就是要检测的字符串

返回值,返回第一个匹配到的字符串的数组,如果匹配不到返回null


var reg = /\d{2}/g;

var str = '12w34e56';

var str = '1wwww2www';

console.log(reg.exec(str));


如果正则表达式中使用g的标识符,则表示全局匹配

每匹配完一次,下次匹配就在上一次匹配结束之后的基础上匹配

var arr1 = reg.exec(str);

console.log(arr1[0]);

console.log(reg.exec(str));

console.log(reg.exec(str));

console.log(reg.exec(str));


先定义一个空数组来接受匹配到的字符串

var arr = [];

var strArr; // 每次匹配到的字符串数组

while(strArr = reg.exec(str)){

将匹配到的字符串放到数组中

arr.push(strArr[0]);

}

console.log(arr);



console.log(Boolean([12432]));  // true

console.log(Boolean([]));  // true

 js中转为布尔值为false的数据  0  ''  NaN  undefined  null 其他的都为true



1. replace(正则表达式,要替换为什么内容) 匹配正则,然后替换

var str = '无论多大麻烦,黑夜总会过去';

console.log(str.replace(/(大麻|夜总会)/g,'*'));


2. search(正则)  匹配到字符串中是否有合格的然后索引,匹配不到返回-1

var str = '12w34w56e';

var reg = /\d{2}/

var res = str.search(reg);

console.log(res);


3. match(正则)  返回匹配到的字符串的数组,如果是全局匹配,匹配到多个返回数组

如果匹配不到返回空null

var time = '今天的日期是2021-08-25';

var reg = /\d{2,4}/g;

var res = time.match(reg);

console.log(res); // ["2021", "08", "25"]


正则匹配字符串,会尽量的按多个次数匹配,拿到结果



// 需求:用户名要求是 6到12位字母数字下划线组成

/^\w{6,12}$/


qq号  5位11位数字  第一位不为0

/^[1-9]\d{4,10}$/

console.log(/^[1-9]\d{4,10}$/.test('01234567'));


邮箱

非_$开头,任意字符出现至少6次,一个@符号,(163|126|qq|sina)中的任意一个,一个点,(com|cn|net)中的任意一个


admin123@163.com

admin123@qq.com

/^[^_$]\w{5,}@(163|126|qq|sina)\.(com|cn|net)$/


/\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/


中文匹配

console.log(/[\u4e00-\u9fa5]/.test('中文')); // true

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

推荐阅读更多精彩内容