web前端-js小记(7)-正则表达式

0、\d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分别是什么?

符号 含义
\d [0-9] 表示数字字符
\w [a-zA-Z0-9_] 表示数字,大小写字母及下划线
\s [\t\n\x0B\f\r] 表示空白符
[a-zA-Z0-9] 表示大小写字母,数字字符
\b 表示单词边界
. 表示除回车符换行符的所有字符
* 出现0次或多次(任意次)
+ 出现1一次或多次(最少出现一次)
? 出现0次或1次(最多出现一次)
x{3} 表示x字符出现3次
^ 以什么字符做为开头
$ 以什么字符做为结尾
[^abc] 表示不是abc的所有字符
abc{3,5}? ?在量词后面表示非贪婪模式,若字符串匹配,c取3个
(abc){10} 表示abc字符连续出现10次
abc(?=def) 匹配后面为def的abc

1、RegExp 相关方法

  1. RegExp.prototype.test(str)
//测试字符串参数中是否存正则表达式模式,如果存在则返回true
var reg = /\d+\.\d{1,2}$/g;
reg.test('123.45'); //true
reg.test('34.5678'); //false
  1. RegExp.prototype.exec(str)
//用的不多
//正则表达式模式在字符串中查找,若找到了匹配的,返回一个结果数组,否则返回null
var reg = /\d/g;
var r = reg.exec('a1b2c3');
  1. String.prototype.search(reg)
//检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,忽略标志g,返回字符串的第一个匹配的位置
'a1b2c3'.search(/\d/g); //1
'a1b2c3'.search(/\d/); //1
  1. String.prototype.match(reg)
//非全局调用:只能执行一次匹配,返回数组,第一个元素存放的是匹配文本,第二个元素存放index,是匹配文本的起始字符在字符串中的位置,第三个元素存放input,是检索的字符串
var r = 'aaa123456'.match(/\d/);   //["1", index: 3, input: "aaa123456"]

//全局调用:返回数组,存放的是字符串中所有的匹配子串,没有index和input
var r = 'aaa123456'.match(/\d/g);  //["1", "2", "3", "4", "5", "6"]
  1. String.prototype.replace(reg, replaceStr)
//1、string对象的replace方法,我们最常用的是传入两个字符串的做法,但这种做法有个缺陷,只能replace一次
// 2、replace方法的第一个参数还可以传入RegExp对象,可以进行全局替换

'abcabcabc'.replace('bc','X'); //aXabcabc
'abcabcabc'.replace(/bc/g,'X'); //aXaXaX
  1. String.prototype.split(reg)
//和replace方法类似,在一些复杂的分割情况下我们可以使用正则表达式解决。
'a,b,c,d'.split(',');   //["a", "b", "c", "d"];
'a1b2c3d'.split(/\d/);   //["a", "b", "c", "d"]

2、写一个函数trim(str),去除字符串两边的空白字符

function trim(str){
  var reg=/(^\s+|\s+$)/g;
  return str.replace(reg,"");
}
var result=trim("  345");
var result1=trim("\nabs");

3、写一个函数isEmail(str),判断用户输入的是不是邮箱

function isEmail(str){
  var reg=/\w+@[0-9a-zA-Z]+[.][a-z]+/g;
  return reg.test(str);
}
var result1=isEmail("234@qq.com");
var result2=isEmail("abc@123.123");

4、写一个函数isPhoneNum(str),判断用户输入的是不是手机号

function isPhoneNum(str){
  var reg=/^1\d{10}$/g;
  return reg.test(str);
}
var result1=isPhoneNum("1205425879a");
var result2=isPhoneNum("12457896312a");
var result3=isPhoneNum("12012456789");

5、写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)

function isValidUsername(str){
  var reg=/^\w{6,20}$/g;
  return reg.test(str);
}
var result1=isValidUsername("ast");
var result2=isValidUsername("astsdg/n");
var result3=isValidUsername("astsd/n");
var result4=isValidUsername("astsdg");
var result5=isValidUsername("astsdgastsdgastsdgsd");

6、写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,只包括大写字母、小写字母、数字、下划线,且至少包括两种)

function isValidPassword(str){
  if(!/^\w{6,20}$/.test(str)) return false;
  if(/^\d{6,20}$/.test(str)|/^[a-z]{6,20}$/.test(str)|/^[A-Z]{6,20}$/.test(str)|/^_{6,20}$/.test(str)) return false;
  return true;
}
var result1=isValidPassword("abretedggdfgfg");
var result2=isValidPassword("456456dfgdfg");
var result3=isValidPassword("____________");

7、写一个正则表达式,得到如下字符串里所有的颜色

var re = /(#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})(?=;))/g
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
console.log(subj.match(re))  // ['#121212', '#AA00ef']

8、下面代码输出什么? 为什么? 改写代码,让其输出[""hunger"", ""world""].

var str = 'hello  "hunger" , hello "world"';
var pat =  /".*"/g;
str.match(pat); 

输出[""hunger" , hello "world""]
原因:因为.表示除了回车符和换行符的所有字符,代表出现0次或多次,而且后面没有?,说明是贪婪模式,是竟可能多的匹配,g代表全局搜索,所以得到这结果

var str = 'hello  "hunger" , hello "world"';
var pat =  /".*?"/g;     //?表示非贪婪模式的匹配,匹配中用尽可能少的次数去匹配,所以得到不同结果
str.match(pat); 

(mission 7)

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

推荐阅读更多精彩内容

  • 正则表达式(Regular Expression)是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系...
    草鞋弟阅读 751评论 0 0
  • 正则表达式 正则表达式(Regular Expression)是计算机科学的一个概念。正则表达式使用单个字符串来描...
    yshenhn阅读 360评论 0 0
  • RegExp是正则表达式的缩写正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 正则的定义方法...
    饥人谷_廖珍阅读 331评论 0 1
  • 一、问答 1.\d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^$分别是什么? \d :...
    我是小韩阅读 330评论 0 0
  • www.cnblogs.com/hai-ping/articles/2997538.html /判断输入内容是否为...
    自话阅读 1,043评论 0 1