什么是正则表达式
正则表达式(Regular Expression,简称为RegEx)是一种用于匹配字符串的表达式,值得一提的是,正则表达式独立于编程语言,几乎所有的编程语言都支持正则表达式
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式基本语法与对象
正则表达式应用场景
- 从大量文本中匹配具有某种特定条件的文本
- 文本替换
- 爬虫爬取数据
- 验证用户输入的内容是否符合某种条件
- 数据匹配
- 表单验证
基本语法
正则表达式的基本语法为:/正则表达式主体/修饰符(可选)
修饰符一般有:/i(不区分大小写),/g(全局匹配,最常用),/m(多行匹配),/s(特殊字符圆点 . 中包含换行符 \n)
我们最常使用的修饰符是/g,所以以下例子统一使用/g。
var a = "1234"
var b = a.replace(/1/g,0)
//b:0230 1被替换成了0
正则表达式常用方法如下:
- split()
- replace()
- search()
- match() 以下我们介绍search()和match()两种方法
search()
返回要查找的字符第一次出现的位置下标,若未找到返回-1
var a = "1231"
var b = a.search(/1/g)
//b:0
match()
返回所有要查找的字符的值,并存入数组
var a = "1231"
var b = a.match(/1/g)
//b:["1","1"]
正则表达式规则
正则表达式的规则写于正则表达式主体部分,永远表示正则表达式具体的限制规则
[ ]:匹配字符串
满足[ ]内的任意字符即可匹配成功
如:/[js]/g,代表匹配"j"和"s"这两个字符(注意:[ ]内的匹配符不需要用逗号分隔)
-:区间
/[0123456789]/g与/[0-9]/g的效果相同
而/[0-9a-zA-Z]/g则可以匹配所有数字以及大小写字母
\ :转义字符
如:/\-/g:可以匹配字符"-"
^:取反
在匹配语句前加^表示匹配所有不符合该语句的字符
如:/[^0-9]/g可以匹配所有非数字的字符
以下为一些便捷的匹配规则:
- \w 匹配任意字符,包括[0-9],[a-z],[A-Z]及下划线
- \d 匹配数字,包括[0-9]
- \s 匹配空白 包括空格、制表符、换行符等
- \W 匹配非字符
- \D 匹配非数字
- \S 匹配非空白
\b :单词边界
仅匹配有边界的单词
如:
/\bhello/g 匹配“hellohello hello-hello”中的加粗部分,其中第二个hello无法被匹配,因为他前面紧挨其他单词,无边界。
/\bhello\b/g 匹配"hellohello hello-hello"的话,第一个和第二个hello都无法匹配成功
^ $ :开始与结束
尽管^已经代表取反,但是如果^在字符串开头的话,他代表匹配开头字符
如:
/^h/g代表匹配以h开头的字符串
/s$/g代表匹配以s结尾的字符串
.:任意字符
.代表任意字符,但不能代表\n换行符
如:
/jav./g 可以匹配java,javaaaaa,javs,jave
/J…/g 可以匹配J开头的任意四位字符串
? :可选字符
?可以指定某个字符可选,出现0或1次
如:
/colou?r/g 可匹配color和colour
{N}:重复
{N}代表某字符或字符串出现N次
如:
/\d{4}/g 代表任意四位数字
{M,N}:重复区间
代表某个字符或字符串出现M到N次
如:
/\d{3,5}/g 可匹配3-5位数字
{N,}:开闭区间
{N,}代表某字符或字符组出现N次到无限次
如:
/\d{1,}/g 代表任意数次出现1到无限次
+*:简写
+表示{1,},即/\d+/g等同于/\d{1,}/g
*表示{0,},即/\d*/g等同于/\d{0,}/g