正则表达式基础

正则表达式基础

元字符

正则表达式语言由两种基本字符类型组成: 原意文本字符元字符 元字符使正则表达式具有处理能力。元字符指的是在正则表达式中具有特殊意义的专用字符

  • 常用的元字符如下
代码 含义
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下滑线或汉字
\d 匹配任意的空白符
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
\ 匹配子表达式
? 可选项元素
{n,m} 匹配的次数为n-m次
{n,} 匹配的次数至少为n次

现在举例如下:
假如我们要匹配以1开头的五位数到7位数 可以写成 1\d{5,6}$
假如我们要找以cat开头的字符,可以写成^cat
假如我们要找以cat结束的字符串,可以写成cat$
假如我们要查找元字符 本身呢? 如我们要查找 . 或者$ 我们只能使用转义符\ 来取消这些字符的特殊含义。如 我们要匹配. 我们应该使用 \.

字符组

字符组是用来匹配若干个字符 。假如我们需要搜索的字符是 skull ,但是又不确定是skulk,那我们可以使用正则表达式结构体[....] ,它容许我们列出在某处期望匹配的字符。[k] 匹配字符k,而[km] 能匹配字符k或者m 。所以使用 skul[lk] 既能匹配skull,也能匹配skulk

在字符组内部,字符组元字符 - 表示一个范围:

举例如下 <H[1-6]><H[123456] 所表达的意思是一样的。
[0-9][a-z]是常用的匹配数字和小写字母的简便方式。多重范围的匹配也是容许的。例如 [012345abcdefABC] 可以写成[0-5a-fA-C]也可以写成[a-f0-5A-C]

  • 顺序是无所谓的
  • 只有在字符组内部,连字符才是元字符--否则它就只能匹配普通的连字符号。在字符组中,问号和点号起不到元字符的作用

如下面的例子 [0-9A-Z!.?] 的含义是匹配一个数字,大写字母,下划线,感叹号,点号,或者是问号。

排除型字符组

[^...] 取代 [...] 这个字符组就会匹配任何未列出的字符。例如 [^1-6] 匹配除了1到6以外的任何字符。从上面的举例,我们可以发现^ 在字符组内部的含义与在行的起始是不一样的。
下面举一个例子关于^的特殊情况的例子。

/** 
  *@description 使用javascript语言来测试 排除型字符组
*/

var regTest = /q[^u]/;
var stringTest = 'Iraq';
var stringTestOne = 'Iraq ';//Iraq后面有一个空格
var result = regTest.test(stringTest);
console.log(result);
result = regTest.test(stringTestOne);
console.log(result);
//输出的结果为 //false// true

从上面的例子可以 ,正则表达式要求q之后紧跟一个u以外的字符。这就排除了q处在行尾的情况。由于字符串都行尾都有换行符,但是正则表达式并没有处理。

用点号来匹配任意字符

元字符. (通常称为点号dot)是用来匹配任意字符组的简便写法。例如我们要搜索 03/19/76 03.19.76 或03-19-76,不怕麻烦的话,可以写成03[-./]19[-./]76
也可以简单地尝试 03.19.76 注意换行符\n 点号匹配不了,但是制表符\t 能够匹配

多选结构

匹配任意子表达式

| 是一个非常简洁的元字符,它的意思是‘或’,依靠它,我们能够把不同的子表达式组合成一个总的表达式,而这个总的表达式又能够匹配任意的子表达式。子表达式称为多选分支(alternative)对于skul[lk] 表达式,我们可以写成 skull|skulk ,但是写成skul[l|k] 还能够匹配skul| ,在字符组中 | 不起任何作用。我们还可以添加括号 skul(l|k) = skull|skulk = skul[l|k]

忽略大小写

在javascript 中正则表达式忽略大小写使用i字母 ,

可选元素选项

我们看color和colour的匹配。它们的区别在于,后面的单词比前面的多一个u,我们可以使用colou?r 来解决这个问题。元字符? 代表可选项 。把它加在某个字符后面,就表示此处容许出现这个字符,不过它的出现并非匹配成功的必要条件。 u? 这个字符与我们之前看到的元字符都不相同,它只作用于之前紧邻的元素。因此,colou?r 的意思是匹配c,然后匹配o,然后匹配l,然后匹配o ,然后匹配u , 然后是u? ,最后是r。

u? 肯定是能够匹配成功的。有时侯它会匹配一个u, 有时不匹配任何字符。关键在于,无论u是否出现,匹配都是成功的。

规定重现的次数的范围:区间

有些版本的正则表达式支持使用元字符来定义重现次数的区间 ....{min,max} 。这种表示方法称为区间量词 例如...{3,12} 表示容许的次数在3到12之间。

重复出现。

+*
元字符 +表示之前紧邻的元素出现一次或多次。而*表示之前紧邻的元素出现任意次。也就是意思说“匹配尽可能多的元素,但如果连一次匹配都无法完成,也不要紧”。
我们现在使用上面的知识来匹配 表示小时制的字符,例如 “5:20 am” 或者"12:03 pm"正则表达式可以这样写
[0-9]?[0-9]:[0-9][0-9].(am|pm)
那我们怎么实现更严谨的匹配24小时制的呢?
(([01][0-9])|(2[0-3])):[0-5][0-9].(am|pm) 该正则表达式能够精确的匹配24小时制的时间

捕获组(待续)

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

推荐阅读更多精彩内容