正则表达式(Regular Expression,简称RegExp或RE)是一种对字符串操作的逻辑公式,其描述的是一种字符串匹配的模式(Pattern);根据这种匹配模式,可对字符串进行一些列操作,诸如:搜索子串、替换子串、验证字符串是否符合指定匹配模式。
/正则表达式主体/修饰符(非必选);
var patt = /zhuanfou/i;
上例解析:
正则表达式中的修饰符是非必选参数,用来指定某些特殊的匹配方式;常用的修饰符如下:
修饰符 | 说明 |
---|---|
i |
执行匹配过程中,忽略字母大小写的区别 |
g |
执行全局匹配(找到所有匹配,而非找到第一个匹配后就停止) |
m |
执行多行匹配 |
search()方法不仅可以传入子串,还可以直接传入正则表达式来匹配符合条件的子串。
var str = "-_-ZhuanFou"; var n = str.search( /zhuanfou/i ); // 忽略字母大小写,返回结果为3
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的字符串 |
在JavaScript中,RegExp对象(正则表达式对象)也是预定义了相应的属性和方法。
test()方法是RegExp对象的内置方法,可用来验证字符串是否符合正则表达式的匹配条件,若存在可匹配到的子串,则返回true;反之则返回false。
var patt = /n/; patt.test( "-_-Zhuanfou" ); // 因为字符串中含有字符n,所以返回true
上面是故意用patt变量来存储正则表达式对象,其实可以直接一行搞定,这样更帅:
/n/.test( "-_-Zhuanfou" );
exec()方法也是RegExp对象的内置方法,可用来执行匹配指定字符串,若匹配成功,则把找到的文本作为对象返回;若匹配失败,则返回null;更多如下所示:
/fou/.exec( "-_-Zhuanfou" );