肉渣教程

JS 正则表达式

上一节 下一节

正则表达式

正则表达式Regular Expression,简称RegExp或RE)是一种对字符串操作的逻辑公式,其描述的是一种字符串匹配的模式(Pattern);根据这种匹配模式,可对字符串进行一些列操作,诸如:搜索子串、替换子串、验证字符串是否符合指定匹配模式

语法

/正则表达式主体/修饰符(非必选);

var patt = /zhuanfou/i;

上例解析:

  • /zhuanfou/i 是正则表达式,而不是字符串
  • zhuanfou 是正则表达式的主体,用来匹配搜索
  • i 是修饰符,加上此修饰符,则在匹配过程中忽略字母大小写

修饰符

正则表达式中的修饰符是非必选参数,用来指定某些特殊的匹配方式;常用的修饰符如下:

修饰符 说明
i 执行匹配过程中,忽略字母大小写的区别
g 执行全局匹配(找到所有匹配,而非找到第一个匹配后就停止)
m 执行多行匹配

search()中使用正则表达式

search()方法不仅可以传入子串,还可以直接传入正则表达式来匹配符合条件的子串。

var str = "-_-ZhuanFou";
var n = str.search( /zhuanfou/i ); // 忽略字母大小写,返回结果为3

运行一下

replace()中使用正则表达式

replace()方法,只会替换第1个符合匹配的子串;但若使用修饰符g,则可替换所有符合匹配的子串。

var str = "-_-ZhuanFou";
var res = str.replace( /-/g, "^" ); // 会把全部的"-"都替换成"^"

运行一下

同时使用多个修饰符

修饰符可以同时使用,一起用上去就好啦,顺序无所谓的。

var str = "-_-ZhuanFou-_-ZhuanFou";

// 同时使用2个修饰符 
// ig和gi都可以,顺序无所谓的
// 下面这个正则表达式会全局匹配、且忽略大小写
var res = str.replace( /zhuanfou/ig, "永不加赋" );

运行一下


正则表达式利器也,让search()方法和replace()方法变得更加轻灵强大。下面介绍正则表达式更多的匹配模式。


正则表达式匹配模式

友情提示:点击下表橙色部分即可在专否沙盒中运行示例。


括号用于匹配某个范围内的字符:

表达式 说明
[abc] 查找中括号中的每一个字符(可以不仅仅是abc三个字符,[abc]只是一个例子)
[^abc] 查找任何不在中括号中的字符
[0-9] 查找中括号中指定范围的数字字符([0-9]只是一个例子,还可以是[1-3]等)
[A-Z] 查找从大写字母A到大写字母Z的字符
[a-z] 查找从小写字母a到小写字母z的字符
(word1|word2) 查找小括号中每一个以符号|分隔出来的字符串


元字符(Metacharacter)是用来匹配某个特定字符:

元字符 说明
\d 匹配1个数字
\s 匹配1个空格字符
\b 根据单词边界进行匹配
\n 查找换行符
. 查找单个字符,除了换行符和行结束符
\uxxxx 查找十六进制数xxxx代表的Unicode字符


量词(Quantifiers)(下表的n可以是字符、字符串、括号表达式、元字符等)

量词 说明
n+ 匹配任何包含至少一个n的字符串
n* 匹配任何包含零个或多个n的字符串
n? 匹配任何包含零个或一个n的字符串
n{x} 匹配包含x个n的字符串
n{x,y} 匹配包含x至y个n的字符串
n{x,} 匹配包含至少x个n的字符串
n$ 匹配任何结尾为n的字符串
^n 匹配任何开头为n的字符串
?=n 匹配任何其后紧接n的字符串
?!n 匹配任何其后没有紧接n的字符串

使用 RegExp对象(正则表达式对象)

在JavaScript中,RegExp对象(正则表达式对象)也是预定义了相应的属性和方法。


RegExp对象的 test()方法

test()方法是RegExp对象的内置方法,可用来验证字符串是否符合正则表达式的匹配条件,若存在可匹配到的子串,则返回true;反之则返回false。

var patt = /n/;
patt.test( "-_-Zhuanfou" );  // 因为字符串中含有字符n,所以返回true

运行一下


上面是故意用patt变量来存储正则表达式对象,其实可以直接一行搞定,这样更帅:

/n/.test( "-_-Zhuanfou" ); 

运行一下

RegExp对象的 exec()方法

exec()方法也是RegExp对象的内置方法,可用来执行匹配指定字符串,若匹配成功,则把找到的文本作为对象返回;若匹配失败,则返回null;更多如下所示:

/fou/.exec( "-_-Zhuanfou" );

运行一下


JS 正则表达式

上一节 下一节