正则表达式
# # 正则表达式
正则表达式对于每个开发者都非常重要,用的好能在一些关键时刻让自己变得轻松。推荐个正则可视化工具:regulex (opens new window) (opens new window),帮助学习者直观验证。再推荐Regex Tester (opens new window) (opens new window)进行在线调试。
原理:
- 解析
- 语法分析
- 词法分析
- 编译
- 状态机
- 运行
# # 限定符
* 0次或多次
+ 1次或多次
? 0次或1次
{n} 匹配n次
{n,} 至少n次
{n, m} 至少n次,至多m次
1
2
3
4
5
6
7
2
3
4
5
6
7
\ 转义符
. 任意字符
| 或运算
\d = [0-9]
\D = [^0-9]
\w = [a-zA-Z0-9_]
\W = [^a-zA-Z0-9_]
\s 空白字符
\S 非空白字符
^ 定位符,字符串起始位置;当在[]号时代表取反。
$ 定位符,字符串末尾位置。
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# # 贪婪模式/非贪婪模式
贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配。常用的有*
和 +
限定符
/.*/g
1
2
2
非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配。
// 遇到?,尽可能少的匹配
/.*?/g
1
2
3
2
3
# # 正则方法
# # regex.exec(string)
如果匹配成功,exec() 方法返回一个数组;匹配失败,返回 null
let regexExec = /#(.*)$/.exec('http://localhost:8081/#/demo')
/*
[ '#/demo',
'/demo',
index: 22,
input: 'http://localhost:8081/#/demo' ]
*/
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# # regex.test(string)
查看正则表达式与指定的字符串是否匹配。返回 true 或 false
let regexTest = /#(.*)$/.test('http://localhost:8081/#/demo') // true
1
2
2
# # string.match(regex)
在非全局匹配模式下
,类似regex.exec(string)。- 在
全局匹配模式下(使用g标志)
,则将返回与完整正则表达式匹配的所有结果(Array),但不会返回捕获组,或者未匹配 null。
// 非全局匹配模式
let stringMatch = 'http://localhost:8081/#/demo'.match(/#(.*)$/)
// [ '#/demo',
// '/demo',
// index: 22,
// input: 'http://localhost:8081/#/demo' ]
// 全局匹配模式
let stringMatch = 'http://localhost:8081/#/demo'.match(/#(.*)$/g) // [ '#/demo' ]
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# # string.search(regex)
匹配成功,search() 返回正则表达式在字符串中首次匹配项的索引,否则返回 -1。类似regex.test()
let stringSearch = 'http://localhost:8081/#/demo'.search(/#(.*)$/) // 22
1
2
2
# # 其他
其他正则相关语法@jawil总结的十分详细,故转载在此。 以下图片有个谬误,这里纠正下:\w
匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]。
编辑 (opens new window)