正则表达式

常见符号表示的含义:

  • \d 表示匹配 0~9之间的任一数字,相当于[0,9]。

  • \D 表示非数字字符

  • \w 表示任意字母数字或下划线,相当于[0-9a-zA-Z_]。

  • \W [^a-zA-Z_0-9] 非单词字符
    (单词字符包括:a-z、A-Z、0-9,以及下划线。)

  • \s 表示空白字符(包含制表符,空格符,断行符等),相当于[\t\r\n\v\f]。

  • \S 表示非空白字符

  • \b 表示匹配到的词的边界。

  • \B 表示匹配到的非词的边界

  • . 表示匹配除回车(\r),换行(\n)r,行分隔符(\u2028) ,段分隔符(\u2029)以外的所有字符。

  • * 表示某个模式出现0次或多次相当于{0,}。

  • + 表示某个模式出现1次或多次相当于{1,}。

  • ? 表示某个模式出现0次或多次相当于{0,1}。

  • {n} 表示某个模式出现n次。

  • {n,m} 表示某个模式出现n~m次。

  • ^表示以什么开头

  • $ 表示以什么结尾

  • ^$ 表示空字符串

  • [^] 表示对后面的匹配条件取反

  • /(hunger){10}/圆括号包起来表示分组匹配

  • 前瞻
    exp1(?=exp2) 匹配后面是exp2的exp1
    exp1(?!exp2) 匹配后面不是exp2的exp1

  • /(hello)|(world)/ /hello|world/ 表示或,两者其中之一

  • \t 水平制表符

  • \r 回车符

  • \n 换行符

  • \f 换页符

  • \v 垂直制表符

  • \0 空字符

正则表达式的写法

  • javaScript通过内置对象RegExp支持正则表达式,有两种方式创建正则表达式对象
    var reg = new RegExp("[a]","g")
    var reg = / [a]/g
  • 修饰符
    g:global,全文搜索,不添加的话搜索到第一个结果停止搜索
    i:ingore case,忽略大小写,默认大小写敏感
    m:multiple lines,多行搜索

正则表达式一些属性

RegExp实例对象有五个属性

  • global:是否全局搜索,默认是false

  • ignoreCase:是否大小写敏感,默认是false

  • multiline:多行搜索,默认值是false

  • lastIndex:是当前表达式模式首次匹配内容中最后一个字符的下一个位置,每次正则表达式成功匹配时,lastIndex属性值都会随之改变

  • source:正则表达式的文本字符串

正则表达式方法

  • reg.test() 用于测试字符转中是否存在正则表达式的模式,若存在返回true 若不存在返回false
  • reg.exec() 用于在字符串中查找符合正则表达式的字符,若查找成功则返回一个数组,包含匹配到的字符,字符的索引,输入的字符串,匹配字符组成的数组的length属性

正则表达式在字符串方法中的应用

  • str.match(reg) 在非全局调用下返回结果与exec相同,在全局调用下,只返回匹配到的字符组成的数组
  • str.search(reg) 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,返回匹配字符在原字符串的索引。
    它会忽略正则表达式对象的lastIndex属性,并且总是从字符串的开始进行检索,这意味着它总是返回字符串的第一个匹配的位置
  • str.split(reg) 以匹配到的字符分割字符串,返回一个数组(组成的数组中不包含匹配到的字符串)
  • str.replace(reg,string) 以新的字符串替换匹配到的字符串
    (str.replace(old,new)当有多个old时只能替换第一个)
  • str.replace(reg,function(){a,b,c,d})
例子
'2398rufdjg9w45hgiuerhg83ghvif'.replace(/\d+/g,function(r){
    return '('+r+')';
}); //"(2398)rufdjg(9)w(45)hgiuerhg(83)ghvif"

第一个参数很简单,是匹配字符串
第二个参数是正则表达式分组内容,没有分组则没有该参数
第三个参数是匹配项在字符串中的index
第四个参数则是原字符串

全局调用

  • 调用全局的RegExp对象的exec()时,它会在RegExp实例的lastIndex属性指定的字符处开始检索字符串string

  • 当exec()找到了与表达式相匹配的文本时,在匹配后,它将把RegExp实例的lastIndex属性设置为匹配文本的最后一个字符的下一个位置。可以通过反复调用exec()方法来遍历字符串中的所有匹配文本

  • 当 exec() 再也找不到匹配的文本时,它将返回null,并把lastIndex属性重置为0

简单应用

1 去除字符串首尾空白字符

function trim(){
    var str = "abc ";
    var reg = /^\s*|\s+$/g;
    var str2 = str.replace(reg,'');
    return str2;
}
var str = trim()
console.log(str)

2 判断用户输入是否为邮箱

function isEmail(){
    var str = "123456@qq.com";
    var reg = /^\S+[@]\S+[.]\S+$/g;
    return reg.test(str)
}
var result = isEmail()
console.log(result)

3 判断用户输入的是不是手机号

function trim(){
    var str = "18012345671";
    var reg = /^1\d{10}$/
    return reg.test(str)
}
var result = trim()
console.log(result)

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

var reg = /^\w{6,20}$/

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

function isValidPassword(str){
var keyNot=/^\w{6,20}$/;
var key=/(^[A-Z]+$)|(^[a-z]+$)|(^[0-9]+$)|(^_+$)/;
if(keyNot.test(str)){
    if(key.test(str)){
        return "请输入6-20位密码(大写字母、小写字母、数字、下划线,至少包含其中两种)";
    }
    else {
        return "设置成功"
    }
}
else{
    return "请输入6-20位密码(大写字母、小写字母、数字、下划线,至少包含其中两种)"
}
}

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

var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 "
var reg = /#[0-9a-zA-Z]{6}/g

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

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

推荐阅读更多精彩内容