浅谈JS正则表达式的RegExp对象和括号的使用
正则表达式是一种用来精确匹配字符串的工具,而JavaScript中的RegExp对象可以帮助我们在代码中使用正则表达式。
RegExp对象
在JavaScript中,RegExp对象可以通过构造函数创建:
// 创建正则表达式
const regex = new RegExp('ab+c');
// 或者
const regex = /ab+c/;
这两种方式都可以创建一个正则表达式对象,其中 /.../
的写法更为简洁和常用。
RegExp对象的方法:
- test(str):测试字符串str是否匹配正则表达式,返回true或false;
- exec(str):在字符串str中查找匹配正则表达式的子串,返回一个数组包含子串的信息(第0项是匹配的完整子串)或null。如果在正则表达式中使用了括号,则数组中的后面项是括号匹配的子串。
下面对这两个方法进行一些实例说明。
test方法
const regex = /ab+c/;
const str1 = 'abc';
const str2 = 'ac';
console.log(regex.test(str1)); // true
console.log(regex.test(str2)); // false
在这个例子中,由于正则表达式中有ab+
的匹配规则,所以str1
中的abc
匹配成功,返回true;而str2
中的ac
不符合正则表达式,所以匹配失败,返回false。
exec方法
const regex = /^(\d{4})-(\d{2})-(\d{2})$/;
const str = '2021-07-22';
const result = regex.exec(str);
console.log(result);
/* 输出为数组
[ '2021-07-22', '2021', '07', '22', index: 0, input: '2021-07-22', groups: undefined ]
*/
在这个例子中,正则表达式/^(\d{4})-(\d{2})-(\d{2})$/
匹配的是日期格式的字符串。代码中使用了括号将年、月、日三个部分分别提取出来。由于在正则表达式中使用了括号,返回数组中除了匹配的完整字符串外,还有额外的3项分别是括号匹配的子串。
括号的使用
在正则表达式中,圆括号()
具有分组的作用,它可以将一些部分分为一组,方便在匹配后得到对应的子串。另外,括号还可以用来构建子模式。
分组
const regex = /(\d{3})(\d{2})/;
const str = '12345';
const result = regex.exec(str);
console.log(result);
/* 输出为数组
[ '12345', '123', '45', index: 0, input: '12345', groups: undefined ]
*/
在这个例子中,正则表达式/(\d{3})(\d{2})/
匹配的是连续的数字字符串。使用了两个括号将前三个数字和后两个数字分别分为一组,在执行exec方法后,返回的数组中除了匹配的整个字符串之外,还有两项是括号匹配的子串。
子模式
子模式指的是可以在正则表达式中嵌套其他正则表达式,构建更为复杂的匹配规则。
以下是一个例子:
const regex = /^(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})$/;
const str = '2021-07-22 11:30:01';
const result = regex.exec(str);
console.log(result);
/* 输出为数组
[ '2021-07-22 11:30:01',
'2021',
'07',
'22',
'11',
'30',
'01',
index: 0,
input: '2021-07-22 11:30:01',
groups: undefined ]
*/
正则表达式/^(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})$/
匹配的是日期和时间格式的字符串。其中的子模式(\d{2}):(\d{2}):(\d{2})
是指匹配两个数字和一个冒号,这个子模式在整个正则表达式中作为一部分使用。
总结
JavaScript中的RegExp对象可以帮助我们使用正则表达式来处理字符串。括号在正则表达式中有分组和子模式两种用法,分别可以将一些部分分组和构建复杂的匹配规则。在实际中,需要根据情况选择不同的正则表达式来完成需要的任务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈JS正则表达式的RegExp对象和括号的使用 - Python技术站