正则表达式是一种用来描述字符串模式的工具,它可以用来匹配、查找和替换文本中符合某种规则的字符串。
创建正则表达式
在JavaScript中,可以通过两种方式来创建正则表达式:
1. 字面量方式
var reg = /pattern/flags;
其中,pattern是正则表达式的模式,flags是可选的标志,用来指定正则表达式的行为。
2. 构造函数方式
var reg = new RegExp(pattern, flags);
其中,pattern是正则表达式的模式,flags是可选的标志,用来指定正则表达式的行为。
正则表达式模式
正则表达式模式是由普通字符和元字符组成的字符串,普通字符表示它本身,元字符则有特殊含义。
普通字符
- 普通字符表示它本身,例如:a、b、c、1、2、3等等。
元字符
- 原子表达式
.
:匹配除换行符以外的任意字符。\w
:匹配任意一个字母、数字或下划线,等价于[A-Za-z0-9_]
。\W
:匹配任意一个非字母、数字或下划线,等价于[^A-Za-z0-9_]
。\d
:匹配任意一个数字,等价于[0-9]
。\D
:匹配任意一个非数字,等价于[^0-9]
。\s
:匹配任意一个空白字符,包括空格、制表符、换页符等。\S
:匹配任意一个非空白字符。[]
:字符集,匹配方括号中的任意一个字符,例如[abc]
匹配a、b、c中的任意一个。[^]
:否定字符集,匹配除方括号中的任意一个字符以外的任意字符,例如[^abc]
匹配除a、b、c以外的任意字符。
- 重复次数
*
:匹配前面的字符出现0次或多次,例如a*
匹配0个或多个a。+
:匹配前面的字符出现1次或多次,例如a+
匹配1个或多个a。?
:匹配前面的字符出现0次或1次,例如a?
匹配0个或1个a。{n}
:匹配前面的字符出现n次,例如a{3}
匹配3个a。{n,}
:匹配前面的字符出现至少n次,例如a{3,}
匹配3个或多个a。{n,m}
:匹配前面的字符出现至少n次,最多m次,例如a{3,5}
匹配3个到5个a。
- 位置
^
:匹配字符串的开头。$
:匹配字符串的结尾。\b
:匹配单词的边界,例如\babc\b
匹配abc单词,不匹配abca或aabc。\B
:匹配非单词的边界。
正则表达式标志
正则表达式的标志用来指定正则表达式的行为,可以有多个标志。
g
:全局匹配,不止匹配第一个。i
:忽略大小写。m
:多行匹配。
正则表达式方法
在JavaScript中,可以使用正则表达式的方法来实现字符串的匹配、查找和替换。
test()
:测试字符串是否匹配正则表达式。exec()
:在字符串中查找正则表达式匹配的内容,并返回匹配信息的数组。match()
:返回字符串中与正则表达式匹配的字符串的数组。search()
:返回字符串中与正则表达式匹配的位置。replace()
:使用替换字符串替换掉与正则表达式匹配的子串。split()
:将字符串分割成数组,使用正则表达式作为分隔符。
实例
// 创建正则表达式
var reg = /abc/i;
// 测试字符串是否匹配正则表达式
var str = "Abc";
var result1 = reg.test(str); // true
// 在字符串中查找正则表达式匹配的内容,并返回匹配信息的数组
var result2 = reg.exec(str); // ["Abc"]
// 返回字符串中与正则表达式匹配的字符串的数组
var result3 = str.match(reg); // ["Abc"]
// 返回字符串中与正则表达式匹配的位置
var result4 = str.search(reg); // 0
// 使用替换字符串替换掉与正则表达式匹配的子串
var result5 = str.replace(reg, "efg"); // "efg"
// 将字符串分割成数组,使用正则表达式作为分隔符
var str2 = "a,b,c";
var result6 = str2.split(","); // ["a", "b", "c"]