定义与基础语法
这是 w3school 对正则表达式的定义:
正则表达式是构成 搜索模式(search pattern) 的字符序列。
当您搜索文本中的数据时,您可使用搜索模式来描述您搜索的内容。
正则表达式可以是单字符,或者更复杂的模式。
正则表达式可用于执行所有类型的文本搜索和文本替换操作。
也就是说,正则表达式是用于匹配字符串的一种格式。通过正则表达式将复杂的字符串匹配描述格式化,方便我们以较为简短的语句完成字符串的匹配、校验与替换等。
正则表达式的语法为:/pattern/modifiers
其中,
pattern
为模式,在搜索中使用
modifiers
为修饰符,用于一些修饰操作(例如大小写不敏感)
创建一个正则表达式的简便方法的示例如下:
var regExp = /javaScript/i;
表示 “包含javaScript(不区分大小写)这个单词的字符串” 。
RegExp对象
事实上,以上述方法创建的正则表达式是一个 RegExp
对象。RegExp
对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
对象创建
创建RegExp对象有两种方法:直接量语法和创建RegExp对象的语法。它们的创建格式分别如下:
语法类型 | 语法格式 |
---|---|
直接量语法 | /pattern/attributes |
创建RegExp对象的语法 | new RegExp(pattern, attributes) |
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。参数 attributes 是一个可选的字符串,如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
function RegExp返回的值是一个新的 RegExp
对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 RegExp()
构造函数将用与指定的 RegExp
相同的模式和标志创建一个新的 RegExp
对象。
如果不用 new 运算符,而将 RegExp()
作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。
对象方法
RegExp对象的对象方法如下:
方法 | 描述 |
---|---|
compile | 编译正则表达式。 |
exec | 检索字符串中指定的值。返回找到的值,并确定其位置。 |
test | 检索字符串中指定的值。返回 true 或 false。 |
String中支持的RegExp的操作方法有:
方法 | 描述 |
---|---|
search | 检索与正则表达式相匹配的值。 |
match | 找到一个或多个正则表达式的匹配。 |
replace | 替换与正则表达式匹配的子串。 |
split | 把字符串分割为字符串数组。 |
RegExp对象的操作方法
在下文中,RegExpObject
表示一个正则表达式RegExp
对象。
complie
compile() 方法用于在脚本执行过程中编译正则表达式。在应用时可以通过 compile() 方法,改变正则表达式。它的语法格式如下:
RegExpObject.compile(regexp,modifier)
参数 | 描述 |
---|---|
regexp | 正则表达式。 |
modifier | 规定匹配的类型。“g” 用于全局匹配,“i” 用于区分大小写,“gi” 用于全局区分大小写的匹配。 |
exec
exec() 方法用于检索字符串中的正则表达式的匹配。它的语法格式如下:
RegExpObject.exec(string)
参数 | 描述 |
---|---|
string | 必需。要检索的字符串。 |
exec
的返回值是一个数组,存放匹配的结果。如果未找到匹配,则返回值为 null。
test
test() 方法用于检测一个字符串是否匹配某个模式.。
RegExpObject.test(string)
参数 | 描述 |
---|---|
string | 必需。要检索的字符串。 |
如果字符串 string 中含有与 RegExpObject
匹配的文本,则返回 true,否则返回 false。因此调用 RegExp
对象 r 的 test() 方法,并为它传递字符串 s,与这个表示式是等价的:(r.exec(s) != null)
。
String字符串中相关的正则表达式操作方法
这些是string对象中有关的正则表达式的操作方法。
search
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
stringObject.search(regexp)
参数 | 描述 |
---|---|
regexp | 该参数可以是需要在string对象 中检索的子串,也可以是需要检索的 RegExp 对象。 |
string对象中第一个与 regexp
相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回 -1。
search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回string对象的第一个匹配的位置。
match
match()
方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该方法类似 indexOf()
和 lastIndexOf()
,但是它返回指定的值,而不是字符串的位置。
stringObject.match(searchvalue)
stringObject.match(regexp)
参数 | 描述 |
---|---|
searchvalue | 必需。规定要检索的字符串值。 |
regexp | 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。 |
返回值返回存放匹配结果的数组。该数组的内容依赖于 regexp
是否具有全局标志 g。
更多说明详见w3school。
replace
replace()
方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
stringObject.replace(regexp/substr,replacement)
参数 | 描述 |
---|---|
regexp/substr | 必需。规定子字符串或要替换的模式的 RegExp 对象。 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。 |
replacement | 必需。一个字符串值。规定了替换文本或生成替换文本的函数。 |
返回一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
split
split() 方法用于把一个字符串分割成字符串数组。
stringObject.split(separator,howmany)
参数 | 描述 |
---|---|
separator | 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。 |
howmany | 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。 |
返回值是一个字符串数组。该数组是通过在 separator
指定的边界处将字符串 string对象 分割成子串创建的。返回的数组中的字串不包括 separator
自身。
但是,如果 separator
是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)。
如果把空字符串 ("") 用作 separator,那么 string对象 中的每个字符之间都会被分割。String.split()
执行的操作与 Array.join
执行的操作是相反的。
一些表达式元素
修饰符
修饰符是正则表达式后修饰正则表达式的符号
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |
当需要使用修饰符时,可以按照如下形式进行书写:
var regExp = /javaScript/i;
如果是以RegExp
对象的形式,可以以如下格式创建对象:
var regExp = new RegExp("javaScript","i");
方括号
方括号用于查找某个范围内的字符。
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符。 |
[^abc] | 查找任何不在方括号之间的字符。 |
[0-9] | 查找任何从 0 至 9 的数字。 |
[a-z] | 查找任何从小写 a 到小写 z 的字符。 |
[A-Z] | 查找任何从大写 A 到大写 Z 的字符。 |
[A-z] | 查找任何从大写 A 到小写 z 的字符。 |
[adgk] | 查找给定集合内的任何字符。 |
[^adgk] | 查找给定集合外的任何字符。 |
(red|blue|green) | 查找任何指定的选项。 |
更多内容详见w3school,下同
元字符
元字符(Metacharacter)是拥有特殊含义的字符:
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符。 |
\w | 查找单词字符。 |
\W | 查找非单词字符。 |
\d | 查找数字。 |
\D | 查找非数字字符。 |
\s | 查找空白字符。 |
\S | 查找非空白字符。 |
\b | 匹配单词边界。 |
\B | 匹配非单词边界。 |
\0 | 查找 NUL 字符。 |
\n | 查找换行符。 |
\f | 查找换页符。 |
\r | 查找回车符。 |
\t | 查找制表符。 |
\v | 查找垂直制表符。 |
\xxx | 查找以八进制数 xxx 规定的字符。 |
\xdd | 查找以十六进制数 dd 规定的字符。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
量词
量词 | 描述 |
---|---|
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属性
属性 | 描述 |
---|---|
global | RegExp 对象是否具有标志 g。 |
ignoreCase | RegExp 对象是否具有标志 i。 |
lastIndex | 一个整数,标示开始下一次匹配的字符位置。 |
multiline | RegExp 对象是否具有标志 m。 |
source | 正则表达式的源文本。 |