1.字面量形式的RegExp
var expression= / pattern / flag;
以上就是正则表达式的形式;其中 pattern(模式)部分可以是简单的、复杂的正则表达式,正则表达式可以包含 字符类、限定符(啥?)、分组(又是啥?)、向前查找以及反向引用。每一个正则可以带一个会多个 flag(标志),这个标志用来表明这个正则的行为(行为:是否全局查找,是否忽略大小写,是否多行查找)。目前正则支持3个标志:
- g 表示全局(global)模式,使用 g 时,代表模式 pattern 被应用在所有的字符串,而非在发现字符串中第一个匹配项时就停止;
- i 表示不区分大小写(case-inseneitive)模式,即在匹配时忽略模式与字符串的大小写;
- m 表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在匹配项
因此,正则表达式就是一个模式与上述三个标志的组合体,不同组合产生不一样的结果。
var pattern1=/ at / g ;
// 表示匹配字符串中所有的 “ at ”
var pattern2=/ [bc]at /i;
// 表示匹配第一个出现的“ bat ”或者“ cat ”,不区分大小写
var pattern3=/ .at /gi ;
// 匹配所有以at结尾的3个字符的组合,不区分大小写
注意:正则表达式与其他语言类似。模式中使用的元字符都必须转义。元字符包括:
( [ { \ ^ * | $ ? + . } ] ),这些元字符都有一种及以上的特殊用途
// 表示匹配第一个出现的 [bc]at ”,不区分大小写
var pattern4=/ \[bc\]at / i ;
// 匹配所有的‘.at’
var pattern5=/ \.at /g ;
根据以上的例子可知,在匹配的字符串中有元字符,需要在其前面添加转义字符 \ 来进行转义,否则会将其当做有特殊意义的字符
2.构造函数形式的RegExp
var pattern_1 = new RegExp(“pattern”, "flag");
前面的例子都是使用字面量形式来定义正则表达式,另一种创建正则表达式是使用构造函数 RegExp。他接收两个参数,第一个参数是要匹配的字符串模式,另一个是标志字符串。
var pattern2=/ [bc]at /i;
var pattern_2=new RegExp(“ [bc]at ”, " i ") ;
注意:传递给 RegExp 构造函数的参数都是字符串,所以不能把字面量正则传递给构造函数,并且在某些情况下要对字符进行双重转义。所有的元字符必须双重转义,已经转义过的字符也是。例如 \n(此处的 \ 在字符串中通常会被转义为 \\ ,而在正则表达式字符串中就会变成\\\\);

3.RegExp的实例属性
RegExp的每个实例都有以下属性,通过这些属性可以取得有关模式的各种信息。
- global 布尔值,表示是否设置了 g 标志
- ignoreCase 布尔值,表示是否设置了 i 标志
- mutliline 布尔值,表示是否设置了 m 标志
- laseIndex 整数,表示搜索下一次匹配项的开始位置
-
source 正则表达式的字符串表示,按照字面量形式返回
image.png
4.RegExp的实例方法
4.1 exec() 方法,专为捕获组而设计的。接收一个参数,即要应用模式的字符串,然后返回包含匹配信息的数组,没有匹配的时候返回null;返回的虽然是数array的实例,但是包含两个额外的属性:index和input。其中index表示匹配项在字符串中的位置,而input表示应用正则表达式的字符串,在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的项
var test="mom and dad and baby";
var pattern=/mom (and dad (and baby)?)?/gi;
var mat=pattern.exec(test);
console.log(mat);

4.2 test() 方法,接收一个字符串参数,当该参数与模式匹配则返回true,否则返回false。
5.RegExp构造函数属性
这些属性适用于作用域中的所有正则表达式,并且基于所执行的最近一次的正则操作而变化,这些属性可以通过两种方式访问

使用这些属性可以从exec()与test()方法执行操作中提取出更具体的信息。

网友评论