JS中的RegExp对象
显式构造函数,语法为:new RegExp("pattern"[,"flags"])。
隐式构造函数,语法为: /pattern/[flags]。
index | 是当前表达式模式首次匹配内容的开始位置,从0开始计数。其初始值为-1,每次成功匹配时,index属性都会随之改变。 |
input | 返回当前所作用的字符串,可以简写为$_,初始值为空字符串""。 |
lastIndex | 是当前表达式模式首次匹配内容中最后一个字符的下一个位置,从0开始计数,常被作为继续搜索时的起始位置,初始值为-1,表示从起始位置开始搜索,每次成功匹配时,lastIndex属性值都会随之改变。 |
lastMatch | 是当前表达式模式的最后一个匹配字符串,可以简写为$&。其初始值为空字符串""。在每次成功匹配时,lastMatch属性值都会随之改变。 |
lastParen | 如果表达式模式中有括起来的子匹配,是当前表达式模式中最后的子匹配所匹配到的子字符串,可以简写为$+。其初始值为空字符串""。每次成功匹配时,lastParen属性值都会随之改变。 |
leftContext | 是当前表达式模式最后一个匹配字符串左边的所有内容,可以简写为$`(其中“'”为键盘上“Esc”下边的反单引号)。初始值为空字符串""。每次成功匹配时,其属性值都会随之改变。 |
$1…$9 | 这些属性是只读的。如果表达式模式中有括起来的子匹配,$1…$9属性值分别是第1个到第9个子匹配所捕获到的内容。如果有超过9个以上的子匹配,$1…$9属性分别对应最后的9个子匹配。在一个表达式模式中,可以指定任意多个带括号的子匹配,但RegExp对象只能存储最后的9个子匹配的结果。在RegExp实例对象的一些方法所返回的结果数组中,可以获得所有圆括号内的子匹配结果。 |
global | 返回创建RegExp对象实例时指定的global标志(g)的状态。如果创建RegExp对象实例时设置了g标志,该属性返回True,否则返回False,默认值为False。 |
ignoreCase | 返回创建RegExp对象实例时指定的ignoreCase标志(i)的状态。如果创建RegExp对象实例时设置了i标志,该属性返回True,否则返回False,默认值为False。 |
multiLine | 返回创建RegExp对象实例时指定的multiLine标志(m)的状态。如果创建RegExp对象实例时设置了m标志,该属性返回True,否则返回False,默认值为False。 |
source | 返回创建RegExp对象实例时指定的表达式文本字符串。 |
exec | 语法格式为exec(str)。该方法使用创建RegExp对象实例时所指定的表达式模式对一个字符串进行搜索,并返回一个包含搜索结果的数组。 如果为正则表达式设置了全局标志(g),可以通过多次调用exec和test方法在字符串中进行连续搜索,每次都是从RegExp对象的lastIndex属性值指定的位置开始搜索字符串。 如果没有设置全局标志(g),则exec和test方法忽略RegExp对象的lastIndex属性值,从字符串的起始位置开始搜索。如果exec方法没有找到匹配,返回值为null;如果找到匹配,则返回一个数组,并更新RegExp对象中有关静态属性以反映匹配情况。返回数组中的元素0包含了完整的匹配结果,而元素1~n依次是表达式模式中定义的各个子匹配的结果。 |
test | 语法格式为test(str)。该方法检查一个字符串中是否存在创建RegExp对象实例时所指定的表达式模式,如果存在就返回True,否则返回False。 如果找到匹配项,则会更新RegExp对象中的有关静态属性,以反映匹配情况。 |
compile | 语法格式为compile("pattern"[,"flags"])。该方法可以更换RegExp对象实例所使用的表达式模式,并将新的表达式模式编译为内部格式,从而使以后的匹配过程执行更快。 |
默认情况下,正则表达式使用最长(也叫贪婪)匹配原则.当?紧随其它限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式变成使用最短(也叫非贪婪)匹配原则.
分组组合符就是将正则表达式中的某一部分内容组合起来的符号,反向引用符则是用于匹配前面的分组组合所捕获到的内容标识符号
(1) (pattern)将圆括号中的pattern部分组合成一个可统一操作的组合项和子匹配,每个捕获
的子匹配项按照它们在正则表达式模式中从左到右出现的顺序存储在缓冲区中.缓冲区从1开始编号,最多可存储99个子匹配捕获的内容.存储在缓冲区中的子匹配捕获的内容,可以在编程语言中被检索,也可以在正则表达式中被反向引用.若要匹配字面意义的括号字符"("和")",在正则表达式中要分别使用"\(" 和"\)".
(2) \num匹配编号为num的缓冲区所保存的内容,此处的num是一个标识特定缓冲区的一位或两位十进制正整数,这种方式称为子匹配的反向引用.反向引用最有用的应用之一就是能提供表示相同匹配项的能力,例如,要匹配连续的5个数字字符,可以使用\d{5}作为正则表达式文本,它可以匹配12345,但是, 要匹配连续的5个相同的数字字符,如55555、11111等,需要使用(\d)\1{4}作为正则表达式文本,\1表示与前面(\d)所捕获的内容一样,\1{4}则表示前面的(\d)所捕获的内容还连续出现4次.又例如,要匹配"Is is the cost of of gasoline going up up?"中所有连续重复的单词部分,可以使用/\b([a-z]+)\1\b/gi作为正则表达式文本.
(3) (?:pattern) 将圆括号中的pattern部分组合成一个可统一操作的组合项,但不把这部分内容当作子匹配捕获,即pattern部分是一个非捕获匹配,它匹配的内容不存储在缓冲区中供以后使用.这对必须进行组合、但又不想让组合的部分具有子匹配特点的情况很有用.
(4) (?=pattern)称为正向"预测先行"匹配,在被搜索字符串的相应位置必须有pattern部分匹配的内容,但这部分匹配的内容不作为匹配结果处理,更不会被存储在捕获缓冲区中供以后使用.(?=pattern)必须位于一个正则表达式模式的最前或最后面.
(5) (?!pattern)称为反向"预测先行"匹配,在被搜索的字符串的相应位置不能有pattern部分匹配的内容,除此之外,功能与正向"预测先行"匹配一样.