Skip to content

正则表达式是一种通用的工具,在 JavaScript、PHP、Java、Python、C++ 等几乎所有的编程语言中都能使用;但是,不同编程语言对正则表达式语法的支持不尽相同,有的编程语言支持所有的语法,有的仅支持一个子集。本节讲到的正则表达式语法适用于 JavaScript。

定义方式

js
//方式一
var reg = new RegExp("^\\w{1,9}$");

//方式二
var reg = /^\w{1,9}$/;

元字符就是拥有特动功能的特殊字符,大部分需要加反斜杠进行标识,以便于普通字符进行区别,而少数元字符,需要加反斜杠,以便转译为普通字符使用。JavaScript 正则表达式支持的元字符如表所示。

一、字符范围

在正则表达式语法中,放括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符~表示。如果在方括号内添加脱字符^前缀,还可以表示范围之外的字符。

[abc]查找方括号内的任意一个字符
[0-9]查找0-9范围内的数字。
[a-z]查找a到z范围内的字符
[A-Z]查找A到Z范围内的字符
[A-z]查找A到z范围内的字符
[a-zA-Z0-9_]查找所有大小写字符、数字和下划线
[^abc]查找不在方括号内的任意字符

二、边界量词

边界就是确定匹配模式的位置,如字符串的头部或尾部,具体说明如表所示

量词说明
^匹配开头
$匹配结尾

三、量词符号

在正则表达式语法中,定义了一组重复类量词,如表所示。它们定义了重复匹配字符的确数或约数。

量词描述
?匹配0次或1次
*匹配0次或多次
+匹配1次或多次
{m.n}匹配x次( m <= x <=n)
{,n}匹配x次( x <=n)
{m,}匹配x次( m <= x)

四、描述字符

根据正则表达式语法规则,大部分字符仅能够描述自身,这些字符被称为普通字符,如所有的字母、数字等。

元字符就是拥有特动功能的特殊字符,大部分需要加反斜杠进行标识,以便于普通字符进行区别,而少数元字符,需要加反斜杠,以便转译为普通字符使用。JavaScript 正则表达式支持的元字符如表所示。

元字符说明
.查找单个字符,除了换行和行结束符
\w查找单词字符
\W查找非单词字符
\d查找数字
\D查找非数字
\s查找空白字符
\S查找非空白字符
\b匹配单词边界
\B匹配非单词边界
\0查找 null字符
\n查找换行符
\f查找换页符
\r查找回车符
\t查找制表符
\v查找垂直制表符

选择匹配

选择匹配类似于 JavaScript 的逻辑与运算,使用竖线|描述,表示在两个子模式的匹配结果中任选一个.

符号说明
让多个选择匹配逻辑与运算

常用的正则表达式

1、非负整数:^\d+$ 
2、正整数:^[0-9]*[1-9][0-9]*$ 
3、非正整数:^((-\d+)|(0+))$ 
4、负整数:^-[0-9]*[1-9][0-9]*$ 
5、整数:^-?\d+$ 
6、非负浮点数:^\d+(\.\d+)?$ 
7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 
8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$ 
9、负浮点数:^(-((正浮点数正则式)))$ 
10、英文字符串:^[A-Za-z]+$ 
11、英文大写串:^[A-Z]+$ 
12、英文小写串:^[a-z]+$ 
13、英文字符数字串:^[A-Za-z0-9]+$ 
14、英数字加下划线串:^\w+$ 
15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ 
16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$ 或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
17、邮政编码:^[1-9]\d{5}$
18、中文:^[\u0391-\uFFE5]+$
19、电话号码:^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
20、手机号码:^((\d2,3)|(\d{3}\-))?13\d{9}$
21、双字节字符(包括汉字在内):^\x00-\xff
22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)
23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/> 
24、匹配空行:\n[\s| ]*\r
25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
29、提取信息中的中国手机号码:(86)*0*13\d{9}
30、提取信息中的中国固定电话号码:(\d3,4|\d{3,4}-|\s)?\d{8}
31、提取信息中的中国电话号码(包括移动和固定电话):(\d3,4|\d{3,4}-|\s)?\d{7,14}
32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+
34、提取信息中的任何数字 :(-?\d*)(\.\d+)? 
35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)
36、电话区号:/^0\d{2,3}$/
37、腾讯QQ号:^[1-9]*[1-9][0-9]*$
38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
39、中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$

原文链接:正则表达式详解_正则表达式是通用的吗-CSDN博客