匹配字符
两种匹配方式
精确匹配
js
let regex = /hello/
console.log( regex.test("hello") )
// => true
模糊匹配
模糊匹配又可分为:横向 & 纵向
横向模糊匹配
从左至右依次匹配
js
var regex = /ab{2,5}c/g;
var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc";
console.log( string.match(regex) );
// => ["abbc", "abbbc", "abbbbc", "abbbbbc
纵向模糊匹配
字符组:
[]
-表示下一个匹配字符为[]
中的任意一个字符
js
var regex = /a[123]b/g;
var string = "a0b a1b a2b a3b a4b";
console.log( string.match(regex) );
// => ["a1b", "a2b", "a3b"]
纵向模糊匹配范围表示
常用于字符组中表示一段范围中的任意一个字符
js
// 匹配从a到c,d到g的一个小写字母
/[a-cd-g]/.test('g')
// => true
字符组取反
字符组取反:
[^abc]
-表示下一个匹配字符除abc
外的任意一个字符
js
// 匹配从a到c,d到g的一个小写字母
/[^abc]/.test('g')
// => true
多选分支
满足多个子模式(子正则)中的一个
js
// 其中 竖线 两边的都是子模式
/good|nice/.test('nice')
// => true
/a{2}|b{2}/.test('aaxxxbb')
// => true
转义
以下字符正则表达式中需转义:
^
、$
、.
、*
、+
、?
、|
、\
、/
、(
、)
、[
、]
、{
、}
、=
、!
、:
、-
ps: 如果你不确定是否需要转义,添加转义\总是没错的
WARNING
- 当尝试匹配windows文件路径时,反斜杠匹配不到,例如:'C:\Users\zhulj\Desktop\auth-web\pages\m\a.css'
js
console.log('C:\Users\xxx\Desktop')
// ==> C:UsersxxxDesktop 反斜杠全部被忽略, 参与正则匹配时是没有反斜杠的
'C:\Users\xxx\Desktop'.match(/\\/)
// ==> null 匹配不到,参与匹配的真正字符是 C:UsersxxxDesktop
// -------------------------------------------
console.log('C:\\Users\\xxx')
// ==> C:\Users\xxx
'C:\\Users\\xxx'.match(/\\/g)
// ==> ['\\', '\\'] 理论上讲应该是匹配到一个反斜杠...
结论
在js引擎中如果字符串中包含一个反斜杠,该斜杠将会被忽略【被识别为\转义字符】
有两个连着的反斜杠会输出一个,也就是说单个被忽略,多个则前一个为转义用处的反斜杠
斜杠/正常转义处理即可
js
'C:/test-web/pages/m/a.css'.match(/\//g)
[ '/', '/', '/', '/' ]