1.定义:
正则表达式:Regular Expression或regex,regexp。用来描述文本模式的特殊语法。简单的说就是你要匹配的字符串。匹配速度高。
2.在js中的使用:
在js中,正则表达式是由两个斜杠"/"所包围,由字母和数字以及一些符号组成,描述文本模式的表达式对象。
- 正规表达式的修饰符
修饰符 | 描述 |
---|---|
i | 忽略大小写(ignore case) |
g | 全局搜索,查找所有匹配的,而不是找到第一个后就停止(global search) |
m | 多行匹配(multiline search) |
2.正规表达式模式
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符,例如:abcdse |
[0-9] | 查找从0到9的任何数字 |
(x l y) | 查找x和y,例如:在abcgb中匹配/(a l b)/g,结果是abb |
3.元字符(Metacharacter)是拥有特殊含义的字符
元字符 | 描述 |
---|---|
\d | 查找数字 |
\s | 查找空白字符 |
\b | 匹配单词边界 |
\w | 查找单词字符 |
\W | 查找非单词字符 |
. | 查找单个字符,除了换行和行结束符 |
\r | 查找回车符 |
\xxx | 查找八进制规定的字符 |
\xdd | 查找以十六进制数dd规定的字符 |
\uxxxx | 查找Unicode字符为十六进制XXXX的字符 |
4.Quantifiers定义量词
量词 | 描述 |
---|---|
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的字符串 |
例子
^[-+]?\d+(\.\d+)?$
含义:[-+]?表示两个字符,最多同时出现其中的一个。(这个我自己也没有很懂,欢迎评论一起讨论。)
因为.在正规表达式中是元字符,因此要使用.必须使用转义字符\。(\.\d+)表示小数点后至少有一个数字。
整个式子含义:表示0~1个符号字符开头,至少存在一位数字,如果存在小数点,小数点后至少有一位数字,以数字结尾的字符串。匹配了几乎常用的数字。
3. 支持正规表达式的String对象方法
方法 | 描述 |
---|---|
search | 查找与正规表达式相匹配的值,返回其位置 |
match | 查找一个或多个与正规表达式匹配的值 |
replace | 替换与正规表达式相匹配的值 |
split | 把字符串分割为字符串数组 |
例如:
var str = "Visit W3School!";
var n = str.search("W3School");
输出:n=6
var str = "Visit W3School";
var n = str.search(/w3school/i);
输出:n=6
4.RegExp对象
-
在 JavaScript 中,RegExp 对象是带有预定义属性和方法的正则表达式对象。
-
创建RegExp对象:
new RegExp(pattern,attributes);
pattern是一个字符串,指定了正规表达式的模式或其他正规表达式。
attributes是一个可选的字符串,包含属性"g",“i”,“m”,分别用于指定全局匹配,区分大小写,多行匹配。如果pattern是正规表达式,而不是字符串,则必须省略该参数。 -
返回值:一个新的RegExp对象,具有指定模式和标志。若参数pattern是正规表达式,那么RegExp()构造函数将用与指定的RegExp相同模式和标志创建一个新的RegExp对象。如果不用new创建,而是将RegExp()作为函数调用,那么他的行为与new调用时一致,只是当pattern是正规表达式时,返回pattern,而不创建RegExp对象。
-
异常处理:
SyntaxError - 如果 pattern 不是合法的正则表达式,或 attributes 含有 “g”、“i” 和 “m” 之外的字符,抛出该异常。
TypeError - 如果 pattern 是 RegExp 对象,但没有省略 attributes 参数,抛出该异常。 -
RegExp对象属性:
-
RegExp对象的方法
注:compile方法用于将正规表达式编译为内置格式,可以提高速度。
例如:
var patt = /e/;
patt.test("The best things in life are free!");
输出:true
省略写法:
/e/.test("The best things in life are free!");
/e/.exec("The best things in life are free!");
如果为匹配到,返回null