Skip to content

匹配字符

两种匹配方式

精确匹配

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)
[ '/', '/', '/', '/' ]