小结 | 正则表达式模式匹配

正则表达式

是一个描述字符模式的对象。

JavaScript中的正则表达式用RegExp对象表示。
正则表达式的定义

正则表达式的创建:

  • 可以使用RegExp()构造函数来创建RegExp对象.
  • 也可以通过一种特殊的直接量语法来创建。
    var pattern = /s$/ == var pattern = new RegExp("s$");
    //运行这段代码创建一个新的RegExp对象,并将它赋值给变量pattern,这个特殊的RegExp对象用来匹配所有以字母“s”结尾的字符串。
正则表达式的模式规则是由一个字符序列组成的。包括所有字母和数字在内,大多数的字符都是按照直接量仅描述待匹配的字符的。
1. 直接量字符

正则表达式中的所有字母和字符都是按照字面含义进行匹配的。

正则表达式中的直接量字符.png
通行规则:
  • 如果想在正则表达式中使用这些字符的直接量进行匹配,则必须使用前缀\。
  • 对于想按照直接量进行匹配的字母和数字尽量不要用反斜线对其转义。
  • 要想在正则表达式中按照直接量匹配反斜线本身,则必须使用反斜线对其转义。"/\\/".
2. 字符类

将直接量字符单独放进方括号内就组成了字符类。

字符类.png
3. 重复

正则表达式的重复字符语法(尽可能多的匹配)

重复.png
!!!对于"?"、"*",由于字符内可能匹配0个字符,因此他们允许什么都不匹配。
4. 非贪婪的重复

非贪婪重复是匹配尽可能少的,语法为在待匹配字符后加“?”,如 ??、+?。

5. 选择、分组和引用
  • 字符"|"用于分隔供选择的字符
    选择项的尝试匹配次序是从左到右,直到发现了匹配项。
    eg: /ab|cd|ef/可以匹配字符串"ab"、"cd"、"ef"。
  • 圆括号有三种作用:
  1. 把单独的项组合成子表达式。
  2. 在完整的模式中定义子模式。
  3. 允许在同一正则表达式的后部引用前面的子表达式。
  • 正则表达式不允许用双引号括起的内容中有单引号。
  • 在正则表达式中不用创建带数字编码的引用,也可以对子表达式进行分组,以 ("?:" 和 ")"分组。
6.指定匹配位置

正则表达式中的锚字符:
^ 匹配字符串的开头,在多行检索中,匹配一行的开头
$ 匹配字符串的结尾
\b 匹配一个单词的边界
\B 匹配非单词的边界
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配P的那些字符
(?|p) 零宽负向先行断言,要求接下来的字符不与P匹配。

7. 修饰符
  • 修饰符放在"/"符号之外。
  • 修饰符"i"用以说明模式匹配是不区分大小的。
  • 修饰符"g"说明模式匹配应该是全局的。
  • 修饰符"m"在多行模式中执行匹配,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束。

用于模式匹配的String方法

  • search()
    参数为一个正则表达式,返回第一个与之匹配的子串的起始位置(不支持全局检索)。
  • replace()
    其中第一个参数是一个正则表达式,第二个参数是要进行替换的字符串。
  • match()
    唯一参数就是一个正则表达式,返回的是一个由匹配结果组成的数组。
  • exec()
    返回一个数组,带有index和input属性。

RegExp对象

RegExp()构造函数带有两个字符串参数,其中第二个参数是可选的,第一个参数包含正则表达式的主题部分。
var zipcode = new RegExp("\d{5}","g");

RegExp属性

  • source属性
    是一个只读字符串,包含正则表达式的文本。
  • global属性
    是一个只读的布尔值,用以说明这个正则表达式是否带有修饰符g。
  • ignoreCase属性
    也是一个只读的布尔值,用以说明这个正则表达式是否带有修饰符i。
  • multiline也是一个只读的布尔值,用以说明这个正则表达式是否带有修饰符m。
  • lastIndex是一个可读/写的整数,如果匹配模式带有g修饰符,这个属性存储在整个字符串下,一次检索的开始位置。

RegExp方法

  • exec()方法
    对一个指定的字符串执行一个正则表达式。
    即在一个字符串的执行匹配检索,如果没有找到任何匹配就返回null,但如果找到了一个匹配,它将返回一个数组。
  • test()方法
    它的参数是一个字符串。
    用test()对某个字符串进行检索,如果包含正则表达式的一个匹配结果则返回true。
    var pattern = /java/i;
    pattern.test("javascript"); //返回true
正则符号表.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容