正则表达式

正则表达式图形化工具

正则表达式的基本语法

正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

创建(建议字面量方式)

var reg=/<%[^%>]%>/g;

最后的g代表全局
RegExp实例对象有五个属性:
g:global,全文搜索,默认是false,不添加的话搜索到第一个结果停止搜索
i:ingore case,忽略大小写,默认对大小写敏感
m:multiple lines,多行搜索,默认值是false
l: lastIndex,是当前表达式模式首次匹配内容中最后一个字符的下一个位置,每次正则表达式成功匹配时,lastIndex属性值都会随之改变
s:source,正则表达式的文本字符串

元字符

元字符:在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符

( [ { \ ^ $ | ) ? * + .

字符类

正则表达式一个字符(转义字符算一个字符)对应字符串一个字符

可以使用元字符[]来构建一个简单的类,所谓类是泛指符合某些特征的对象。我们可以使用表达式 [abc] 把字符a或b或c归为一类,表达式可以匹配这类的字符。

取反

元字符[]组合可以创建一个类,我们还可以使用元字符^创建反向类/负向类,反向类的意思是不属于XXX类的内容,表达式 [^abc] 表示不是字符a或b或c的内容

范围类

我们可以使用 x-y来连接两个字符表示从x到y的任意字符,这是个闭区间,也就是说包含x和y本身,这样匹配小写字母就很简单了

[a-z]

要是想匹配所有字母呢?在[]组成的类内部是可以连写的,我们还可以这样写 [a-zA-Z]

预定义类

正则表达式为我们提供了几个常用的预定义类来匹配常见的字符,进一步简化使用



例如希望匹配一个 ab+数字+任意字符 的字符串,就可以写成 ab\d.

边界匹配字符

\\手机号码匹配 以1开头 长度为10 以此为结尾
var reg = /^1\d{10}$/
'13301693108'.match(reg) //["13301693108"]
'1330169310822'.match(reg) //null
#匹配以hello作为右边界、左边界
'hello worhellod hello'.match(/\bhello\b/g) //["hello", "hello"] 

'hello wor-hello-d hello'.match(/\bhello\b/g)// ["hello", "hello", "hello"]
 //值得注意的是,中横线也会被认为是单词边界

量词

#匹配[a-z]后面跟(一个或0个)数字字符
'a1234567b45dgf78'.match(/[a-z]\d?/g) //["a1", "b4", "d", "g", "f7"]
#匹配[a-z]后面跟(一个或多个)数字字符
'a1234567b45dgf78'.match(/[a-z]\d+/g) //["a1234567", "b45", "f78"]
#匹配[a-z]后面跟(0个或多个)数字字符
'a1234567b45dgf78'.match(/[a-z]\d*/g)//["a1234567", "b45", "d", "g", "f78"]

贪婪模式与非贪婪模式

量词在默认下是尽可能多的匹配的,也就是大家常说的贪婪模式

'123456789'.match(/\d{3,5}/g); //["12345", "6789"]

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

'123456789'.match(/\d{3,5}?/g); //["123", "456", "789"]

分组

有时候我们希望使用量词的时候匹配多个字符,而不是像上面例子只是匹配一个,比如希望匹配Byron出现20次的字符串,我们如果写成 Byron{20} 的话匹配的是Byro+n出现20次

怎么把Byron作为一个整体呢?使用()就可以达到此目的,我们称为分组

(Byron){20}

如果希望匹配Byron或Casper出现20次该怎么办呢?可以使用字符|达到或的功效

(Byron|Casper){20}

前瞻

(/good(?=Byron)/).exec('goodByron123'); //['good']
(/good(?=Byron)/).exec('goodCasper123'); //null
(/bad(?=Byron)/).exec('goodCasper123');//null

RegExp.prototype.test(str)

方法用于测试字符串参数str中是否存正则表达式模式,如果存在则返回true,否则返回false

#检测是否为手机号码
function isPhoneNumber(str){
  console.log((/^1\d{10}$/).test(str))
}

RegExp.prototype.exec(str)

方法用于正则表达式模式在字符串中运行查找,如果exec()找到了匹配的文本,则返回一个结果数组,否则返回 null

除了数组元素和length属性之外,exec()方法返回对象还包括两个属性。

1.index 属性声明的是匹配文本的第一个字符的位置
2.input 属性则存放的是被检索的字符串string

var str2 = 'hallo jirengu, hbllo world, hcllo ruoyu'
var reg = /h[a-z]llo/g
do{
  result = reg.exec(str2)
  console.log(result)
}while(result)

String.prototype.search(reg)

search() 方法用于检索与正则表达式相匹配的子字符串,不执行全局匹配,从字符串的开始进行检索,总是返回字符串的第一个匹配的位置

String.prototype.match(reg)

match()方法将检索字符串,以找到一个或多个与reg匹配的文本。
通过增加g可控制其采用全局调用或非全局调用

String.prototype.replace(reg, replaceStr)

'abcabcabc'.replace(/bc/g,'X'); //aXabcabc

String.prototype.replace(reg, function)

通过自定义函数,replace可以实现很多强大的功能,尤其是在复杂的字符串替换语句中经常使用

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

推荐阅读更多精彩内容

  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 3,970评论 0 20
  • 正则表达式——基本语法 正则表达式(Regular Expression)是计算机科学的一个概念。正则表达式使用单...
    南山码农阅读 419评论 0 1
  • RegExp对象 字面量 var reg=/\bis\b/g;定义变量reg然后把正则表达式文本写到两个反斜杠之间...
    深沉的简单阅读 1,512评论 0 0
  • 带你入门(几个小小点) 目录 正则表达式的使用 正则表达式的基本构成元素 正则中的类(分类),基本的元字符 + 五...
    南航阅读 678评论 0 2
  • 正则表达式 正则表达式(Regular Expression)是计算机科学的一个概念。正则表达式使用单个字符串来描...
    yshenhn阅读 351评论 0 0