该博文对于已经理解了正则表达式的比较管用
(一)
在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