JS-RegExp函数
项目中遇到一些的字符串处理场景:
- 对整型金额进行千分位格式化,如:1,000
- 表单字段校验,如姓名只能是中文且长度范围是[2,4]
- 身份证号保留前6后4,中间8位掩码处理。
对于这些都可以使用正则表达式完成。如果你还不知道该怎么用,那有必要学习下正则表达式了。
一、RegExp函数
正则表达式专门用于描述字符串的字符组合格式。我们经常对字符串判断是否匹配指定的正则表达式,以及对匹配的字符进行操作(如替换,转换等)。
1.1 创建正则表达式对象
RegExp用来表示正则表达式。RegExp即是构造函数也是个工厂函数。
创建正则表达式的方式:
// 字面量方式 /pattern/flags // 构造函数方式 new RegExp(pattern [, flags]) // 工厂函数方式 RegExp(pattern [, flags])
1.2 exec(String)方法
对指定对字符串进行一次正则匹配操作。如果匹配成功则返回一个数组,否则返回null。
返回的数组:
- 第一个元素是匹配成功对字符串;
- 从第二个元素开始都是匹配的捕获分组字符串;
该数组被添加了两个额外属性:
3.1 input表示输入原始字符串,即exec方法的实参。
3.2 index
表示匹配的字符串在输入参数的下标位置。
// matchs1为["ab", "b", index: 0, input: "abcabc"] var matchs1 = /a(b)/.exec('abcabc'); // 捕获分组 // matchs2为["ab", index: 0, input: "abcabc"] var matchs2 = /ab/.exec('abcabc');
1.3 test(String)方法
判断指定的字符串是否匹配正则表达式。
1.4 flags(i,g,m)
控制匹配行为。
1.5 lastIndex属性
表示正则表达式下次执行匹配操作时字符串下标位置。
var r = /a(b)/g; console.log(r.lastIndex); // 0 r.test('abcabc'); //true, 从字符串下标0开始匹配 console.log(r.lastIndex); // 2 r.test('abcabc'); //true, 从字符串下标2开始匹配 console.log(r.lastIndex); // 5
注意几点:
只有指定全局匹配m时,lastIndex才有效,否则一直为0;
var r = /a(b)/; // 没有指定全局m console.log(r.lastIndex); // 0 r.test('abcabc'); //true, 从字符串下标0开始匹配 console.log(r.lastIndex); // 0 r.test('abcabc'); //true, 从字符串下标0开始匹配 console.log(r.lastIndex); // 0
每次执行全局模式匹配(通过exec或者test方法)时都会影响lastIndex的值。
注意下例中多次调用会出现匹配失败的情况:var r = /a(b)/g; console.log(r.lastIndex); // 0 r.test('abcabc'); //true, 从字符串下标0开始匹配 console.log(r.lastIndex); // 2 r.test('abcabc'); //true, 从字符串下标2开始匹配 console.log(r.lastIndex); // 5 r.test('abcabc'); //false, 从字符串下标5开始匹配 console.log(r.lastIndex); // 0,下次
相关推荐
wangzhaotongalex 2020-10-20
wyq 2020-11-11
TLROJE 2020-10-26
风雨断肠人 2020-10-13
duanqingfeng 2020-09-29
rechanel 2020-11-16
cshanzhizi 2020-10-16
luofuIT成长记录 2020-09-22
phphub 2020-09-10
taomengxing 2020-09-07
MaggieRose 2020-08-19
flyingssky 2020-08-18
山水沐光 2020-08-18
jyj00 2020-08-15
AHuqihua 2020-08-09
山水沐光 2020-08-03