JavaScript中的RegExp对象提供了在字符串中进行正则表达式匹配的能力。它通常用于处理字符串中的模式匹配,如验证、搜索或替换特定模式,是JavaScript中必不可少的一个功能。
RegExp对象的基本概述
创建RegExp对象
使用RegExp对象,最简单的方法是通过一个字符串的值来创建,将其作为参数传递给RegExp的构造函数:
var pattern1 = new RegExp("love");
var pattern2 = /love/;
两种方式均可以创建一个正则表达式,从效果上看是等效的。当然,第二种方式比较常用,因为它更加简洁方便。
特殊字符
正则表达式中存在一些特殊字符,它们的作用相当于占位符。如下表所示:
特殊字符 | 说明 |
---|---|
\d | 匹配任意一个数字字符(0~9) |
\D | 匹配任意一个非数字字符 |
\w | 匹配任意一个英文字母或数字字符(a~z、A~Z、0~9) |
\W | 匹配任意一个非英文字母或数字字符 |
\s | 匹配任意一个空白字符,包括空格、制表符、换页符等 |
\S | 匹配任意一个非空白字符 |
. | 匹配换行符以外任意字符。如果要匹配含换行符的任意字符,可以使用s修饰符或[\s\S] |
修饰符
在RegExp对象中还有一些修饰符,可以对正则表达式的匹配行为进行修饰:
修饰符 | 说明 |
---|---|
g | 全局匹配模式,对于一条字符串进行全局的匹配。 |
i | 忽略大小写模式,使正则表达式不区分大小写地进行匹配。 |
m | 多行模式,使正则表达式可以在多行字符串中进行匹配。 |
s | 使 . 匹配包括换行符在内的任意字符。该修饰符在ES2018才被加入。 |
u | Unicode 模式,开启 Unicode 匹配模式。 |
y | 粘性匹配模式,sticky 模式检查从上一次匹配结束的后一个位置开始。 |
使用RegExp对象进行匹配
test()方法
test()方法用于检测一个字符串是否匹配某个模式,返回一个布尔值。例如:
var reg = /love/;
console.log(reg.test("I love JavaScript")) // true
console.log(reg.test("I Love JavaScript")) // false
exec()方法
exec()方法用于在字符串中搜索一个指定的模式,并返回该模式匹配的结果。该方法返回一个数组,数组中包含模式的匹配结果:
var reg = /JavaScript/gi;
console.log(reg.exec("I Love JavaScript, Do you love JavaScript too?")) // ["JavaScript"]
console.log(reg.exec("I Love JavaScript, Do you love JavaScript too?")) // ["JavaScript"]
RegExp对象的高级用法
正则表达式的分组
使用括号对正则表达式进行分组,可以在一定程度上简化复杂的正则表达式。括号内的正则表达式称为一个子表达式,它用于匹配特定的模式,从而实现整个模式的匹配。例如:
var reg = /(Java)script/;
var str = "I Love JavaScript, Do you love JavaScript too?"
console.log(reg.test(str)) // true
console.log(reg.exec(str)) // ["JavaScript", "Java"]
正则表达式的反向引用
反向引用用于在正则表达式中引用前面匹配的内容。反向引用可以使用反斜杠()和数字来实现,其中数字代表引用的分组号。例如:
var reg = /(\d{3})-(\d{3,8})/;
var str = "010-12345678";
console.log(reg.exec(str)); // ["010-12345678", "010", "12345678"]
replace()方法
replace()方法可以使用正则表达式替换字符串中的特定模式:
var str = "I Love JavaScript, Do you love JavaScript too?"
console.log(str.replace(/love/gi, "hate")); // "I hate JavaScript, Do you hate JavaScript too?"
上面的代码中,指定了一个正则表达式 /love/gi ,将其中所有的 love 替换为 hate。
match()方法
match()方法可以从一个字符串中搜索一个正则表达式的匹配结果,并返回数组:
var str = "Hello World, his name is John Smith.";
console.log(str.match(/\b([A-Z][a-z]+)\b/g)); // ["Hello", "World", "John", "Smith"]
上面的代码中,使用 \b([A-Z][a-z]+)\b 匹配字符串中的标题(即每个单词首字母大写的单词)。
示例
邮箱验证
邮箱账号由字母、数字、下划线、点号和连字符组成,且以字母或数字开头,以字母或数字结尾:
function checkEmail(email) {
var reg = /^[A-Za-z0-9][\w\.-]*[A-Za-z0-9]@[A-Za-z0-9]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$/;
return reg.test(email);
}
console.log(checkEmail("abc@163.com")); // true
console.log(checkEmail("123abc@qq.com")); // true
console.log(checkEmail("_abc@163.com")); // false
console.log(checkEmail("abc@163.com.")); // false
手机号码验证
中国大陆的手机号码由11位数字组成,第一位必须是1,第二位为3、4、5、7或8中的任意一位:
function checkMobile(mobile) {
var reg = /^1[34578]\d{9}$/;
return reg.test(mobile);
}
console.log(checkMobile("18500000000")); // true
console.log(checkMobile("1300000000")); // false
console.log(checkMobile("12345678900")); // false
console.log(checkMobile("19900001111")); // true
以上仅是一些常见的例子,正则表达式的应用十分广泛,可以解决很多字符串模式匹配的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript RegExp对象(正则表达式) - Python技术站