前两天饿了么面试的时候问到了正则,这里有时间简单总结一下。(那天才知道很多大大都是硬着头皮看着API怼正则的 - -)
RegExp对象
JavaScript通过内置对象RegExp支持正则表达式
RegExp对象实例化
字面量
var pattern = /\bis\b/g;
构造函数
var pattern = new RegExp('\\bis\\b', 'g');
修饰符
g: global,全文搜索,如果不添加,搜索到第一个匹配就停止。
i: ignore case,忽略大小写,默认大小写敏感。
m: mutiple lines,多行搜索。
元字符
-
正则表达式有两种基本字符类型组成。
原义文本字符
元字符
元字符是在正则表达式中你有特殊含义的非字母字符。
* + ? $ ^ . | \ ( ) { } [ ]
字符类
可以使用元字符
[]
来构建一个简单的类。所谓类是指符合某些特征的对象,泛指,而不是特指某个字符。
表达式
[abc]
把字符a、b、c归为一类,表达式可以匹配这类字符。(相当于或)
字符类取反
使用
^
创建反向类/负向类。反向类的内容是不属于某类的内容。
表达式
[^abc]
表示不是a或b或c的内容。
范围类
可以使用
[a-z]
表示从a-z的任意字符。(闭区间)在
[]
内组成的类内部是可以连写的[a-zA-Z]。
预定义类
字符 | 含义 |
---|---|
. | 除了回车符和换行符之外的所有字符 |
d | 数字字符 |
D | 非数字字符 |
s | 空白符 |
S | 非空白符 |
w | 单词字符(字母、数字下划线) |
W | 非单词字符 |
边界
字符 | 含义 |
---|---|
^ | 以xxx开始 |
$ | 以xxx结束 |
b | 单词边界 |
B | 非单词边界 |
量词
字符 | 含义 |
---|---|
? | 出现0次或一次 |
+ | 出现1次或多次 |
* | 出现0次或多次 |
{n} | 出现n次 |
{n,m} | 出现n-m次 |
{n,} | 至少出现n次 |
JS正则贪婪模式与非贪婪模式
非贪婪模式
让正则表达式尽可能少的匹配,也就是说一旦成功匹配不再继续尝试就是非贪婪模式。
做法是在量词后面加上?
'123456789'.match(/d{3,5}?/g);
分组
使用
()
可以达到分组的功能使量词作用于分组
或
使用|
可以达到或的效果。
对象属性
golbal:会否全文搜索
ignore case:是否大小写敏感
multiline:多行搜索
lastIndex:是当前表达式匹配内容的最后一个字符的下一个位置
source:正则表达式的文本字符串
RegExp.prototype.test(str)
用于测试字符串参数中是否存在匹配正则表达式模式的字符串
如果存在返回true,否则返回false
RegExp.prototype.exec(str)
exec() 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。