[TOC]
正则表达式学习笔记
1. cheatsheet
Regex cheatsheet.png2. 介绍
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个参数, 一个是正则表达式,一个是字符串或者函数。
网友评论