正则表达式
创建方式
字面量创建
let str = "abc1231dfaf123123fda";
let reg = /\d+/g;
let res = str.match(reg);
console.log(res);
VM262:4 (2) ["1231", "123123"]
划重点: / /内的内容,g为修饰符,表示全局,否则匹配一个后就停止,\d表示为数字,+表示为一个 或多个
构造函数创建
let str = "abc1231dfa123adf";
let reg = new RegExp("\\d+","g");
let res = str.match(reg);
console.log(res)
VM567:1 (2) ["1231", "123"]
划重点:如果有\d之类的需要转义
正则表达式下的方法
test
let str = "abc2323fds123";
let reg = /\d+/g;
console.log(reg.test(str));
VM795:1 true
划重点:匹配到就返回true,不到返回false
exec
let str = "abc2323fds123";
let reg = /\d+/g;
console.log(reg.test(str));
VM795:1 true
console.log(reg.exec(str))
VM885:1 ["123", index: 10, input: "abc2323fds123", groups: undefined]
划重点:exec类似match,但是是基于上次的结束去匹配
split
let str = "abc323adf234";
undefined
let arr = str.split(3);
undefined
console.log(arr);
VM1175:1 (4) ["abc", "2", "adf2", "4"]
undefined
let arr1 = str.split(/\d+/);
undefined
console.log(arr1)
VM1298:1 (3) ["abc", "adf", ""]
search
let str = "abcdeabcde";
undefined
let reg = /e/g;
undefined
console.log(str.search(reg))
VM1516:1 4
划重点:search会忽略全局匹配,永远返回第一个匹配的下标,否则返回-1,类似IndexOf
match
let str = "abc11221defagbdc232322k"
undefined
let reg = /\d+/;
undefined
let reg1 = /\d+/g;
undefined
console.log(str.match(reg))
VM1781:1 ["11221", index: 3, input: "abc11221defagbdc232322k", groups: undefined]
undefined
console.log(str.match(reg1))
VM1871:1 (2) ["11221", "232322"]
划重点:match() 全局,非全局有区别
replace
let str = "adbad2323abcda"
let reg = /\d/g;
str.replace(reg,"*");
"adbad****abcda"
元字符
字符相关
\w:数字,字母,下划线
\W:非数字,字母,下划线
s:匹配空格
S:非空格
.:非\n,\r,\u2028,\u2029
let str = "@#223asdf";
undefined
let reg = /\w+/g;
undefined
console.log(reg.test(str));
VM2301:1 true
let str = "afb"
undefined
let reg = /a.b/;
undefined
console.log(reg.test(str));
VM2480:1 true
数量相关
{} ? + *
let reg = /ce{3}f/g //等于 let reg = /ceeef/g
let reg = /ce{3,4}f/g //可能出现3次到4次
let reg = /ce{1,}f/g // 可能出现1到无穷多
划重点:?–{0,1}次
+ --{1,}
* – {0,}
?:让贪婪模式变成惰性模式
let str = "123456789";
undefined
let reg = /\d{2,4}/g; //贪婪模式
undefined
let reg1 = /\d{2,4}?/g //惰性模式
undefined
let res = str.match(reg);
undefined
console.log(res);
VM2948:1 (2) ["1234", "5678"]
undefined
let res1 = str.match(reg1)
undefined
console.log(res1)
VM3158:1 (4) ["12", "34", "56", "78"]
位置相关
^表示开始,$表示结尾 \b:边界符 \B非边界符
let str = "abcdef"
let reg = /^/g *abcdef
let reg = /^\w/g *bcdef
let reg = /\w\$/g abcde*
let reg = /\$/g abcdef*
划重点:空格是边界的一种,非\w(数字,字母,下划线)都是边界
let str = "this is a apple"; //只打印单独is
undefined
let reg = /\bis\b/g;
undefined
let res = str.match(reg);
undefined
console.log(res);
VM3399:1 ["is"]
括号相关
() 分组,提取值
let str = "abababfdfs";
undefined
let reg =/(ab){3}/g;
undefined
console.log(reg.test(str));
VM3670:1 true
let re = /(\w+)\s(\w+)/;
let str = "John Smith";
let newstr = str.replace(re, "$2, $1");
console.log(newstr);
VM4257:4 Smith, John
[]:字符集合
let str = "my name is LiLei";
undefined
let reg = /Li(L|l)ei/g;
undefined
console.log(reg.test(str));
VM4482:1 true
undefined
let reg1 = /Li[L|l]ei/g;
undefined
console.log(reg1.test(str));
VM4525:1 true
划重点:let reg = /Li(L|l) ei /g == let reg = /Li [Ll]ei/g
let reg = /[0-9]/g
let reg = /[^0-9]/ []内的^表示取反 = 为非数字 ,普通表示为开始
\d =[0-9]; \w = [a-zA-Z0-9_]
匹配模式
g:全局匹配
i:忽略大小写
m: 多行模式
s:让“.”匹配换行
u:匹配unicode编码
y:粘性模式,不可中断
零宽断言
正向零宽断言:将后面是数字的替换掉
let str = "iphone4iphone5iphone6number";
let reg = /iphone(?=\d)/g; // 肯定
let res = str.replace(reg,"苹果");
console.log(res);
苹果4苹果5苹果6number
let reg = /iphone(?!\d)/g; // 否定
iphone4iphone5iphone6number
负向零宽断言
let str = "10px20px30px";
undefined
let reg1 = /(?<=\d+)px/g; // 肯定
undefined
let reg2 = /(?<!\d+)px/g; // 否定
undefined
let res1 = str.replace(reg1,"像素");
undefined
let res2 = str.replace(reg2,"像素");
undefined
console.log(res1)
VM5370:1 10像素20像素30像素
undefined
console.log(res2)
VM5464:1 10px20px30px
本文详细介绍了正则表达式的创建方式、常用方法以及各种元字符和数量相关概念。通过实例演示了字面量创建、构造函数创建、test、exec、split、search、match和replace等方法的用法,并探讨了正则表达式的匹配模式和零宽断言。此外,还展示了在JavaScript中如何使用正则进行字符串操作。
2924

被折叠的 条评论
为什么被折叠?



