编程开发人员,不管是用什么平台,不管使用什么语言。在做规则校验的时候不免都会接触到一个东西,叫做“正则表达式”,使用正则表达式能让我们能很好的定义规则,获去到我们想要的数据格式和校验结果。
推荐教程:W3C_正则表达式
推荐工具:在线正则表达式测试
# 一、JavaScript中基础使用
正则表达式主要是由2个部分组成
/pattern/modifiers
pattern:模式,定义表达式的主体
modifiers:修饰,修饰表达式的条件
# 1.1 定义正则表达式
在JavaScript中有两种方法定义正则表达式
第一种:直接定义(推荐)
let reg = /abc/i
1
第二种:实例化对象
let reg = new RegExp('abc', 'i')
1
# 1.2 RegExp 对象的方法
# test()
test() 方法检索字符串中的指定值。返回值是 true 或 false。
let patt1=new RegExp("e");
document.write(patt1.exec("The best things in life are free"));
// 由于该字符串中存在字母 "e",以上代码的输出将是:true
1
2
3
4
2
3
4
# exec()
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
let patt1=new RegExp("e");
document.write(patt1.exec("The best things in life are free"));
// 由于该字符串中存在字母 "e",以上代码的输出将是:e
1
2
3
4
2
3
4
在使用 "g" 参数时,exec() 的工作原理如下:
- 找到第一个 "e",并存储其位置
- 如果再次运行 exec(),则从存储的位置开始检索,并找到下一个 "e",并存储其位置
# compile()
compile() 方法用于改变 RegExp。
compile() 既可以改变检索模式,也可以添加或删除第二个参数。
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));
patt1.compile("d");
document.write(patt1.test("The best things in life are free"));
1
2
3
4
5
6
7
2
3
4
5
6
7
由于字符串中存在 "e",而没有 "d",以上代码的输出是: true false
# 1.3 配合字符串方法使用
在 JavaScript 中,正则表达式常用于两个字符串方法:search() 和 replace()。
search() 方法使用表达式来搜索匹配,然后返回匹配的位置。
replace() 方法返回模式被替换处修改后的字符串。
# 配合search() 搜索字符串
search() 方法也接受字符串作为搜索参数。字符串参数将被转换为正则表达式:
var str = "Visit W3School";
var n = str.search(/w3school/i);
// 返回目标所在索引位置 6
1
2
3
2
3
用法跟字符串方法indexOf()
较为相似
# 配合replace() 替换字符串
使用大小写不明的正则表达式以 W3school 来替换字符串中的 Microsoft:
var str = "Visit Microsoft!";
var res = str.replace(/microsoft/i, "W3School");
// 结果:Visit W3School!
1
2
3
2
3
# 二、正则基础知识补充
补充四个正则的基础知识点,修饰符,元字符、量词、括号
# 2.1 正则修饰符
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配,忽略大小写 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
m | 执行多行匹配 |
# 2.2 元字符
元字符 | 描述 |
---|---|
\d | 查找数字。 |
\s | 查找空白字符。 |
\b | 匹配单词边界。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
# 2.3 量词
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串。 |
n* | 匹配任何包含零个或多个 n 的字符串。 |
n? | 匹配任何包含零个或一个 n 的字符串。 |
# 2.4 括号
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符。 |
[0-9] | 查找任何从 0 至 9 的数字。 |
(x|y) | 查找由 | 分隔的任何选项。 |
# 三、常用场景表达式
# 四、进阶场景表达式
网站中描述的很清楚,还支持在线测试,在这不赘述:https://tool.oschina.net/regex#