验证文本:var text = 'apple';
量词:控制匹配模式出现的次数和位置
- ? :修饰问号前的一个字符,该字符最多出现一次,可以没有,但是有就只能出现一次,等价于{0,,1} var reg = /apb?c/; ==>var reg = /apb{0,1}c/; 输出结果 console.log(reg); ==> true 字符b可以出现也可以不出现
- *:匹配*前的字符,可以没有,也可以匹配无穷个 等价于 {0,} ==> var reg = /ap?/;或者reg = /app?/; 输出结果仍然为true
- +:+前的所有字符至少出现一次 多可无限次 等价于{1,} var reg = /ap+/;
- ^:开头匹配 匹配^符号后的所有字符,若有其他量词修饰,再考虑情况
- $:结尾匹配 匹配$符号前的所有字符,若有其他量词修饰,再考虑情况 var reg = /ap{5}$/; // 以ap结尾,且p必须出现5次
- {n}:n 指定出现的次数 var reg = /ap{5}$/;
组:匹配模式
- var reg = /(abc)?sda/; // 圆括号中的字符必须以组的形式同时出现或消失
- var reg = /(abc)|2|(sdf)/; // 圆括号中的组(abc)、2、(sdf)三者间必须出现一组,或符号 | ;若或符号前或者后没有使用圆括号包括,则是或上前或者后的所有字符;
- 获取组内容:RegExp.$n,n为正整数,前提是必须通过验证,以正则匹配模式为第一位开头,如:var reg = /(ab)?(bd)/; var isYes = reg.test('bd'); console.log(RegExp.$1 ); 匹配错误或者匹配的文本中没有出现希望获取的位置的组或字符时均无内容返回,若匹配得到且获取该正则位置,则会返回该字符或组
- (?=n):匹配后面紧接着某字符(如字符n)的字符串 // hello(?=g) ==> 匹配后面紧接着字符g的字符串hello;(.*)(?=j) ==> 匹配后面紧跟着字符j的任意字符或者字符串
- (?!n):匹配后面不紧接着某字符(如字符n)的字符串 // hello(?!g) ==> 匹配后面不紧接着字符g的字符串hello (.*)(?!j) ==> 匹配后面不紧跟着字符j的任意字符或者字符串
特殊模式及相关API(模式组成为下划线所标注的符号,不包括空格)
- 贪婪模式: .* :匹配符号前的任意长度字符串,又如:/a.*/ 匹配a字符往后的所有字符,不限个数,不匹配a字符前的字符; .+ :匹配符号前的任意长度(2个字符以上)字符串,当 .+ 前只有一个字符时,匹配失败;
- 懒惰模式: .*? :符号前有几个字符就匹配几个字符,又如:/a.*?/ .*? 符号前只有字符a,那么只匹配字符a; .+? :符号前有n个字符,总是会匹配(n+1)个字符,往后多匹配一个,当待验证文本包含的该字符长度没有至少比 .+? 符号前的字符串长度多一个,则匹配失败;
- 多行匹配: m var reg = /kevin$/m; console.log(reg.test('kevin\nuser')); // 在正则表达式的末尾必须加上字符m,才能实现
- reg.compile(修改的正则,正则修饰符):修改正则(修改检索模式) // var reg = /abc/img; reg.compile('asfsd', 'im');
- reg.exec(文本):查找匹配,找到则返回一个数组,找不到返回一个null;// var result = /草莓/.exec(fruit); var result = /(?<caomei>草莓)/.exec(fruit); 蓝色字体部分在返回的数组中显示为groups对象,尖括号中填写的是字符串 '草莓' 的键名
支持正则的字符串API
- str.replace:替换字符 replace(被替换字符,替换字符); // 如果被替换字符重复出现多次,则可以使用全局变量g,在正则表达式的末尾加上g,如:var s = word.replace(/MMP/g, '***');
- str.split(字符串 | 正则):切割字符串,返回一个数组;var r = roles.split(/@+/);
- str.match(字符串 | 正则): 查找字符,找到返回一个数组,找不到返回null;// var m = word.match(/暑假工/); var m = word.match(/(?<work>暑假工)/); 蓝色字体的显示是返回的数组中的group,尖括号中填写的是字符串 '暑假工' 的键名
- str.search(字符串 | 正则):查找字符, 找到返回字符的下标,找不到返回-1, 用法类似indexOf, indexOf不支持正则查找