摘要:能匹配中的,但不能匹配中的数量界定符符号定义是一个非负整数。则等价于和均为非负整数,其中。该方法接受一个正则表达式作为它的第一个参数。是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
正则表达式及多语言操作指南 /
下面的这些都是JavaScript所不支持的:
匹配字符串开始和结尾的A和Z锚。(但我们仍可以使用^和$来匹配字符串的开始和结尾)
向后查找(lookbehind)(注:但是JavaScript完全支持向前查找(lookahead))
并集和交集类
原子组(atomic grouping)
Unicode支持(单个字符除外,如uFFFF)
命名的捕获组
s(single,单行)和x(free-spacing,无间隔)匹配模式
条件匹配
正则表达式注释
JavaScript是通过RegExp类型来支持正则表达式的。而创建RegExp类型有两种方法。一种是字面量方法(类似于Perl的语法),另一种是使用JavaScript的RegExp构造函数,下面将逐一介绍。
其中expression即为正则表达式的名称,模式(pattern)可以是任何复杂或简单的正则表达式(但必须是在JavaScript支持范围内的),标志(flags)即用来表明正则表达式行为。
g: 表示全局(global)模式,表示pattern会应用于所有字符串,而不是找到一个匹配项后立即停止。
i :表示不区分大小写(ignore)模式。即忽略pattern和字符串的大小写。
m:表示多行(multiple)模式。 即到一行文本末尾时还会继续查找下一行中是否存在匹配的项。
说明:在字面量方法中的flags可以是g、i、m中的任意一个或几个且这里的标志完全适用于之后要讲的RegExp构造函数方法。
此字面量形式的正则表达式表示在不区分大小写的情况下在全局范围内匹配at。
即这种方法使用了RegExp构造函数,并且传递了两个参数(同字面量方法),但值得注意的是:pattern(模式)和flags(标志)都需要使用引号括起来。
6.2.3 对模式中的元字符转义的方法
当我们希望使用元字符本身的含义时,我们就需要对元字符进行转义。比如[ab]c表示ac或bc;若通过转义,即[ab]c就表示成了[ab]c。但是对于上述两种不同的创建方法有不同的转义方式。
使用字面量方法创建正则表达式转义:在需要转义的正则表达式前加即可。如var pattern = /[ab]c/g;表示在全局范围内匹配abc
如果希望知道字符串XxxxoOoooommmm中o的数量(不区分大小写),这时就可以使用match方法传入字符串,如:
输出为6,这种方法还是很容易的。
无论是何种方法创建的正则表达式,他们都具有下面几种属性来描述有关模式的信息:
lastIndex---表示开始搜索下一个匹配项的字符位置的整数,从0算起。
source---按照字面量形式返回正则表达式的字符串表示。
当然,上面代码中使用了大量的console.log()显得很复杂,也可以将这5个属性作为5个参数直接传入到console.log()中。如下所示:
我们还可以将这5个属性保存在一个数组中,再通过console.log()直接输出数组,如下所示:
这个方法接收一个参数,即要应用模式的字符串,用于捕获组。
如果匹配,则返回一个数组;否则返回null。
且其中返回的数组还有额外的两个方法:index和input。index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串。
如果匹配不了,则matches为null;如果匹配,将会在控制台中输出一个数组
这个方法同样也接收一个字符串,如果pattern(模式)和字符串匹配,则返回true,否则返回false。
并且test()方法经常被用在if语句中,举例如下:
这两个方法都会返回正则表达式的字面量,与创建正则表达式的方式无关。
举例如下:
RegExp构造函数也包含了一些属性。值得注意的是,这些属性有两种方式来访问---长属性名和短属性名。介绍如下:
input $_ 最近一次要匹配的字符串 。(注意:前者是长属性名,后者是短属性名,下同)
multiline $* 布尔值,表示是否所有表达式都使用多行模式
注意:Opera不支持上面的1236对应的四个属性,IE不支持multiline属性。