正则表达式(也称为regex)是一种处理字符串的方法,性能非常好。
通过使用特殊的语法构造正则表达式,您可以
1)搜索文本字符串
2)替换字符串中的子字符串
3)从字符串中提取信息
几乎每一种编程语言都实现正则表达式。每个实现之间都有细微的差异,但是通用的概念几乎适用于所有地方。
正则表达式可以追溯到20世纪50年代,当时它被正式化为字符串处理算法的概念性搜索模式。
JavaScript是直接内置正则表达式支持的编程语言之一。
创建
1)字面量创建,如果你的正则表达是固定的,使用此方案创建,性能较好。
2)构建函数创建,如果你的正则表达是动态的,比如需要输入时生成或是代码逻辑生成,需要用此种方式创建。
匹配标志
除了模式外,RegExp对象还接受一个可选的标志参数。
1)忽略大写小标志 i
默认情况下,搜索是区分大小写的。例如/abc/只匹配字符串hi而不是Abc。
2)全局搜索标志 g
默认情况下,是非全局搜索。
3)混合使用i和g
RegExp.prototype.test()
RegExp.prototype.exec()
元字符
这里只涵盖比较常用的
:匹配换行符
:匹配制表符
b:匹配单词的开头或结尾
s: 匹配空白
S:匹配非空白
d :匹配数字 (如同 [0–9])
D :匹配非数字 (如同 [^0–9])
w: 匹配字母数字以及下划线(如同 [a-zA-Z0–9_] )
W: 匹配非字母数字以及下划线(如同 [^a-zA-Z0–9_] )
. :匹配除换行符外的任意字符
[^]:匹配任何字符,包括换行符,对多行字符串很有用
+:匹配前面的表达式1次或多次(如同 {1,})
* :匹配前面的表达式0次或多次(如同 {0,})
? :匹配前面的表达式0次或1次(如同 {0,1})
^:匹配字符串的开头,它后面的正则表达式应该在测试字符串的开头
$ :匹配字符串的结尾,它后面的正则表达式应该在测试字符串的结尾
| : 或,匹配两者中的一个
: 转义字符,匹配原生字符串
捕获与非捕获
(x) -匹配x并记住匹配项。这些被称为捕获组。它还用于在正则表达式中创建子表达式。例如:
(?:x) -匹配x,不记忆匹配。这些被称为非捕获组。例如:
x(?=y) -只在x后面跟着y时匹配x。例如:
例子
从字符串中提取数字
匹配电子邮件地址
获取HTML标记内的内容