JS引用类型中的RegExp类型——轻松记住正则表达式

该博文对于已经理解了正则表达式的比较管用

(一)

在JavaScript中,可以使用RegExp()内置函数创建正则表达式对象。正则表达式直接量也被定义为包含在一对斜杠(/)之间的字符 如: var expression = / pattern / flags;
其中模式(pattern)部分可以使任何简单或者复杂的正则表达式如字符类,限制符,分组等,每个正则表达式可以带有一个或者多个标志(flags),用以表明正则表达式的行为。正则表达式的匹配模式支持的三个标志:

g:表示全局模式(global),即模式将被应用于所有字符串而非发现一个而停止

i:表示不区分大小写(ease-insensitive)模式,在确定匹配想时忽略模式与字符串的大小写

m:表示多行(multiline)模式,即在确定匹配项时忽略模式与字符串的大小写

(二)

1.括号
小括号:分组
中括号:[判断字符位上内容]
大括号:表示出现了多少次

2.预定义字符
. : 任意字符。

\d:数字

\D : 非数字。[^0-9]

\w : 字母或数字[a-zA-Z_0-9]

\W:非字母且非数字

\s :匹配一个空格字符,包括:空格,换行,回车,tab,等价于[ \n\r\t\f]
\S :匹配非空格字符,\s的相反 等价于 [^ \f\n\r\t\v]。

3.边界字符
^ : 行开头

$ : 行结尾

\b : 单词边界

\B:非单词边界

4.特殊字符
\n:换行

\r:回车

\f:换页

5.数量词:必须结合内容
X?: X内容出现零次或一次

X*: X内容出现零次或多次

X+: X内容出现一次或多次

X{n}:X内容出现n次

X{n,}:X内容出现至少n次

X{n,m}:X内容出现n到m次

(三)

RegExp实列方法:是否匹配
(1),test():regexp.test(str)—— 返回true false
match():str.match(regexp)——返回一个数组

(2),另一个稍微复杂点的方法:exec()方法

  • 该方法是专门为捕获组而设计的,接收一个参数,即应用模式的字符串,返回的是包含第一个匹配项信息的数组,或者在没有匹配项的情况下返回null。

  • 返回的数组虽然是Array的实例,但包含两个额外的属性:index和input,
    其中index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串。

  • 在返回的数组中,第一项是与整个模式匹配的字符串,其他项是与模式中捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。

  • 所谓的捕获组:例如使用小括号指定一个子表达式后(前面说过小括号是用来分组的),匹配这个子表达式的文本,也就是此分组捕获的内容,可以在表达式或其他程序中做进一步处理。默认情况下每个捕获组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组号为1,第二个为2,以此类推。

  • 非捕获组只匹配结果,但不捕获结果,也不会分配组号,当然也不能在表达式中和程序中做进一步处理。
    例如:

var text = "mom and dad and baby";
  var pattern = /mom( and dad( and baby)?)?/gi;//该方式属于正则表达式的字面量模式
  /*上面的模式pattern表示text要满足的是字符串内容首先是mom,然后and dad and baby可以紧接着出现0次或1次,再就是其中的and baby 可以出现0次或1次。最后该模式应用于整个text字符串,且不分大小写*/
    var matches = pattern.exec(text);
    console.log(matches);//Array(3)
    console.log(matches.index);//0
    console.log(matches.input);//“mom and dad and baby”
    console.log(matches[0]);//"mom and dad and  baby"
    console.log(matches[1]);//"and dad and baby"
    console.log(matches[2]);//"and baby"

上面代码输出结果如下图:
在这里插入图片描述
解析:上面这个例子中的模式包含两个捕获组:按照规则从左往右第一个捕获组是"and dad"或者"and dad and baby",第二个捕获组是"and baby"。当把字符串传入exec()方法之后,发现了一个匹配项。因为整个text字符串本身与模式匹配,所以返回数组matches的index的属性值为0。返回的数组中的第一项是匹配的整个的字符串,第二项包含与第一个捕获组匹配的内容,第三项包含与第二个捕获组匹配的内容。

(四)

前面例子是以字面量形式来定义的正则表达式,另一种创建正则表达式的方式是使用RegExp构造函数,它接收两个参数:要匹配的字符串模式,标志字符串(可选)。如下:

  var pattern1 = /[bc]at/i;
  var pattern2 = new RegExp("[bc]at","i");

解析

  • 上面的pattern1和pattern2是两个完全等价的正则表示式,需要注意的是传递给RegExp构造函数的参数是字符串,所以某些情况下要对字符串进行双重转义

  • 所有的元字符都必须双重转义,所有的元字符如下
    ( [ { \ ^ $ | ) ? * + . ] }

  • 那些已经转义过的字符也还需要转义,例如\n(字符\在字符串中通常被转义为\,而在正则表达式的字符串中就会变成\\)。

【更为详细内容可参考原文】
原文:https://blog.csdn.net/qq_34477549/article/details/52819449

猜你喜欢

转载自blog.csdn.net/Sunday97/article/details/83903254