正则表达式学习笔记

2017-11-30  本文已影响0人  wishWinds

[TOC]

正则表达式学习笔记

1. cheatsheet

Regex cheatsheet.png

2. 介绍

2.1 character

有时我们希望meta character来代表字符

\d 单个数字

\w 单个字母或数字

\W 单个非字母或数字

\s 单个空格或TAB

\S 单个非空格或TAB

. 单个任意字符

2.2 quantifier

有时我们希望加上量词加以修饰

? 有或者没有(0或1)

* 0个或者以上

+ 1个或者以上

{n} n个

{min, max} min和max之间包含min和max

2.3 position

有时我们希望指定搜索的位置

^ 代表行首占位符

$ 代表行末占位符

\b 代表文字边界 (word boundary)占位符

2.4 char class/alternation

扩展搜索的or 和 not 功能

[] 可选框, 框内所有字符都是or关系,代表可以是某个字符或者是另一个字符

框内中使用. 代表字面量,不是meta character

-

​ 出现在第一个,代表字面量

​ 出现在非第一个,代表从某字符到某字符,例如[a-z]代表从a到z

^

​ 出现在第一个,代表取反

​ 出现在非第一个,代表字面量

()将alternation包裹其中,并用|分隔,切记,此时分隔匹配的是整个可选单词,而不像[]里是单个字符

2.5 capturing group

正则内部会有一个capturing group的概念。每次匹配中,匹配的字符串为group0, 用()指定的group按顺序为group1, group2...

() 代表我们要捕获的group

2.6 reference

我们通过设置capturing group后,会在某个地方引用它, 通过$符号就可以引用, $0代表整个字符串, $1代表设置的第一个capturing group

有时我们希望有一种变量能够标记某个匹配,使得我们可以重复使用它来代表重复出现。这种思想很像编程中的范型:虽然我们不知道他们具体是什么,但是我想约束他们在表达式中的关系。这时\出现了。 \1代表第一个capturing group

综上:

​ $一般用在替换中。 在替换中引用表达式中的某个capturing group;

​ \一般用在表达式中。自己引用自己的某个captruing group以增加约束关系

3. 总结

我们发现小小的正则表达式,其实体现了编程里面的一些基本思想。

正则的本质是字符串搜索。通过搜索,我们又延伸了搜索中的or not概念来增强表达式的能力。后面我们又加入了变量的功能来得以复用。加入范型的概念以使用更高阶的表达式来约束搜索。

4. js举例

js中使用g代表全局,使用i代表忽略大小写

4.1 match/test/exec

match作用在字符串上,test/exec作用在regex上

match不会返回capturing group

exec每次执行会返回group0, group1…数组。加上g参数后, 需要自己迭代执行, 以获取每次查找的所有group

"My name is John".match(/\b\w\b/g) 匹配所有单词

"abc@abc.com abc.d.e@123.edu abc@abc.net".match(/[.\w]+@\w\.(com|net|edu)/g)匹配邮箱

4.2 split

我们可以用split来指定哪些是分隔符,通常用\W来表示, split后的数组不包含分隔符,如果我们希望保留分隔符,可以用一个tricky方法。使用(\W), 添加一个group

4.3 replace

replace后面可以跟2个参数, 一个是正则表达式,一个是字符串或者函数。

上一篇 下一篇

猜你喜欢

热点阅读