正则表达式
正则表达式是一种用来匹配字符串模式的工具,它可以让我们快速、灵活地查找、替换、验证字符串。在JavaScript中,我们可以使用RegExp对象创建正则表达式。
创建正则表达式
有两种方式创建正则表达式:
- 使用
RegExp
对象
我们可以通过传递一个字符串或使用两个反斜杠包裹的正则表达式来创建一个RegExp对象。例如:
// 使用字符串创建正则表达式
var regex1 = new RegExp("hello");
// 使用正则表达式字面量创建正则表达式
var regex2 = /hello/;
- 使用正则表达式字面量
我们也可以使用字面量的方式创建一个正则表达式。例如:
var regex3 = /hello/g;
在这个例子中,“hello”是我们要匹配的字符串,g是一个选项,表示在整个字符串中查找匹配,而不是只匹配第一个字符。
正则表达式选项
在JavaScript中,我们可以使用一些选项来在正则表达式中进行匹配。以下是一些常用的选项:
i:不区分大小写的匹配
g:全局匹配,即查找所有匹配项而不是只查找第一个匹配项
m:多行匹配。通常认为一个^符号只匹配一个字符串的开始,一个
符号匹配一个字符串的结束。但是如果多行模式被激活
,
和
符号匹配一个字符串的结束。但是如果多行模式被激活,^和
符号匹配一个字符串的结束。但是如果多行模式被激活,和会匹配字符串中每个换行符的前一个字符和后一个字符。
正则表达式模式
除了选项之外,我们还需要使用模式来匹配字符串。以下是一些基本模式:
字符 描述
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
. 匹配任意单个字符,除了换行符和其他终止符
- 匹配前一个字符0次或多次
- 匹配前一个字符1次或多次
? 匹配前一个字符0次或1次
{n} 匹配前一个字符恰好n次
{n,} 匹配前一个字符至少n次
{n,m} 匹配前一个字符至少n次,不超过m次
\ 转义字符。可以对元字符进行转义,比如.表示匹配字符"." ,但是不匹配任何其他字符。
[] 匹配字符集中的任意一个字符。例如,[abc]会匹配a,b或c中的任意一个字符。
[^] 除了字符集中指定的字符,匹配其他任意字符
( ) 将模式组合成子模式。可以后续为匹配和其他用途使用。
\d 匹配任何一个数字字符
\D 除了数字字符之外,匹配任何其他字符。
\w 匹配任何字母数字字符
\W 除了字母数字字符之外,匹配任何其他字符。
\s 匹配任何一个空白字符
\S 除了空白字符之外,匹配任何其他字符。
正则表达式方法
我们可以使用RegExp对象上的一些方法来处理正则表达式。以下是一些常用的方法:
test:在字符串中搜索匹配项。如果找到匹配项,则返回true;否则返回false。
var regex = /hello/g;
var str = "hello world";
console.log(regex.test(str)); // true
exec:在字符串中搜索匹配项。如果找到匹配项,则返回匹配的结果数组;否则返回null。
var regex = /hello/g;
var str = "hello world";
console.log(regex.exec(str)); // ["hello"]
match:在字符串中搜索匹配项。如果找到匹配项,则返回匹配结果数组。否则返回null。
var regex = /hello/g;
var str = "hello world";
console.log(str.match(regex)); // ["hello"]
replace:替换字符串中匹配的子串。
var regex = /hello/g;
var str = "hello world";
console.log(str.replace(regex, "goodbye")); // "goodbye world"
search:在字符串中搜索匹配项。如果找到匹配项,则返回第一个匹配的字符位置;否则返回-1。
var regex = /hello/g;
var str = "hello world";
console.log(str.search(regex)); // 0
split:将字符串划分为一个数组,根据指定的分隔符进行划分。
var regex = /hello/g;
var str = "hello world";
console.log(str.split(regex)); // ["", " world"]