正则1
最初学正则的时候一笔带过没有认真学,导致每次想使用正则都是百度搜,最近重新学习了一下正则的语法,记录一下。
修饰符
i 忽略大小写
const reg = /a/i; let r1 = reg.test("abc"); console.log(r1); // true let r2 = reg.test("ABC"); console.log(r2); // true
g 全局匹配
类似 replaceAll,会匹配整个字符串中所有符合的
const reg2 = /ABC/g; let r3 = '我ABC你ABC123ABC他ABC/*-'.replace(reg2, "abc"); console.log(r3); // 我abc你abc123abc他abc/*-
元字符
\b 单词边界符
用来匹配单词(字母)的边界,当待匹配的字母两边不是字母的时候才会匹配。 例如,匹配情况: ' cat ', '我cat你', '1cat2' 例如,不匹配情况: 'AcatB', 'acatb', ' cata', 'acat 'const reg1 = /\bcat\b/g; const str1 = 'acatb cat123 cat '; let s1 = str1.replace(reg1, 'dog'); console.log(s1); // acatb cat123 dog
^ $ 字符串边界符
^x 表示整个字符串以x开头const reg2 = /^a/; const str2_1 = 'abcdef'; const str2_2 = 'bacdef'; let s2_1 = reg2.test(str2_1); // true let s2_2 = reg2.test(str2_2); // falsex$ 整个字符串以x结尾
const reg3 = /a$/; const str3_1 = '123caxa'; const str3_2 = '123caax'; const s3_1 = reg3.test(str3_1); // true const s3_2 = reg3.test(str3_2); // false^x$ 表示精确匹配,必须整个字符串都是才可以
const reg4 = /^abcd$/; const str4_1 = 'abcd'; const str4_2 = 'abcdXXabcd'; const s4_1 = reg4.test(str4_1); // true const s4_2 = reg4.test(str4_2); // false
量词
* 表示0次或更多次 + 表示1次或更多次 ? 表示0次或1次 {x} 表示必须x次 {x,} 表示大于等于x次 {x,y} 表示大于等于x,小于等于y次const reg2 = /^ab+c$/ const str2 = 'abbbbbbc'; let s2 = reg2.test(str2); // true const reg4 = /^ab{4}c$/ const str4 = 'abbbbc'; let s4 = reg4.test(str4); // true const reg6 = /^ab{4,6}c$/ const str6 = 'abbbbbbc'; let s6 = reg6.test(str6); // true
[ ] 可选择项
[ ] 匹配[ ]中任意一个const reg1 = /[ABC]/g; const str1 = 'AyuiyiuB78945C$%*ABC'; let s1 = str1.replace(reg1, '字母'); console.log(s1); // 字母yuiyiu字母78945字母$%*字母字母字母
- 连字符
可使用 a-z A-Z 0-9 或中间截断
const reg2 = /[a-z]/g; // [A-Z]大写 const str2 = '123uan/*iqmABC8odv'; let s2 = str2.replace(reg2, '字母'); console.log(s2); // 123字母字母字母/*字母字母字母ABC8字母字母字母
匹配多个
const reg4 = /[a-zA-Z0-9_]/g; // 常用的用户名合法检测 const str4 = 'q8w(*^&*989^1fAS4F*(&1a6dghf$%$UVuyG*)(^&$YG_xt'; let s4 = str4.replace(reg4, '他'); console.log(s4); // 他他他(*^&*他他他^他他他他他他*(&他他他他他他他$%$他他他他他*)(^&$他他他他他
[^ ] 取反
除可选择项以外的
const reg5 = /[^0-9]/g; // 除数字以外的 const str5 = 'G1dg32UT&gdT*14123fd121GTgdT*44fd&TG^%1424gf$^&G#%^gs*(464786135'; let s5 = str5.replace(reg5, '和'); console.log(s5); // 和1和和32和和和和和和和14123和和121和和和和和和44和和和和和和和1424和和和和和和和和和和和和和464786135
. 除\r和\n以外的字符
注意,空字符串 '' 一样不会被匹配
const reg6 = /./g; const str6 = ' a \nb1*\rQ'; let s6_1 = str6.replace(reg6, "空格"); let s6_2 = reg6.test(""); console.log(s6_1); // 空格空格空格\n空格空格空格\r空格 console.log(s6_2); // false
可选择项简写
\d => [0-9] 任意数字 \D => [^0-9] 除数字以外的 \w => [a-zA-Z0-9_] 任意字母数字下划线 \W => [^a-zA-Z0-9_] 除字母数字下划线以外的 \s => [\t\r\v\n\f] 任意换行空格制表符等 \S => [^\t\r\v\n\f] 任意换行空格制表符等分组和分支结构
() 分组
就是常规理解的()的意思
const reg1 = /(ab)+/g; // (ab)+ 1个或1个以上的 ab const str1 = 'ab12AB3ab*/-a/b7ab'; let s1 = str1.replace(reg1, "分组"); console.log(s1); // 分组12AB3分组*/-a/b7分组分组可进行捕获 捕获结果可用 $1 $2...表示,例如格式化日期:
const reg2 = /(\d{4})-(\d{2})-(\d{2})/; const str2 = '日期为:2020-11-20'; let s2 = str2.replace(reg2, "$2/$3/$1"); console.log(s2); // 日期为:11/20/2020
| 分支结构
类似或,可匹配多个项
const reg3 = /abc|123/g; const str3 = '我是abc,你是123'; let s3 = str3.replace(reg3, "XXX"); console.log(s3); // 我是XXX,你是XXX
标签:const,log,字母,正则,let,test,console From: https://www.cnblogs.com/xt112233/p/17473782.html