js正则表达式

来源:互联网 发布:robotmaster软件下载 编辑:程序博客网 时间:2024/05/21 22:26

正则表达式的定义

方法一:new RegExp(pattern, attributes),

注意var reg = new RegExp('\\sjava\\s','m');模式字符串里面的一些带反斜杠的字符需要转义

方法二:reg = /abc/;

直接量字符


还有一些字符在正则表达式中具有特殊的含义,要匹配它们要进行转义

字符类(character class)

重复

这些是在模式之后跟随,用以指定字符重复的标记

贪婪的匹配和非贪婪的匹配

贪婪模式下的匹配

<span style="font-size:18px;">var str = 'aaabbb';var reg = /a*b/;console.log(reg.exec(str));//输出的结果["aaab", index: 0, input: "aaabbb"]/*下面是reg.exec(str)匹配的过程,从后向前回朔,console.log(reg.exec(aaabbb));第一次console.log(reg.exec(aaabb));第二次console.log(reg.exec(aaab));第三次 匹配成功*/</span>


典型例子
<span style="font-size:18px;">var str = 'aaabbbab';var reg = /a*b/g;for(var i=0;i<4;i++){var obj = reg.exec(str);console.log(obj);}</span>

匹配结果中输出了 两次b,其实就是贪婪匹配,完成第一次匹配后,以第一次匹配的结束点为起始点
继续匹配得到的结果,

非贪婪模式下的匹配

上面典型例题中的费贪婪模式和贪婪模式是一样,非贪婪模式下就是从左往右的方向匹配的,所以结果一样
我们看一下下面的简单例子
var str = 'aaaa';var reg = /a+?/g;for(var i=0;i<4;i++){var obj = reg.exec(str);console.log(obj);}


这里把4个a输出来了,容易理解因为它是从左往右挨个字符匹配的,这里的贪婪模式下将只会匹配到一个

'aaaa',因为从右往左第一个就是匹配'aaaa',所以没有继续下去了。

选择,分组,引用

指定匹配的位置

这里并不会真的去匹配一个字符什么的,而是匹配了字符简的位置,

var str = 'ab';var reg = /a(?=b)/g;var obj = str.match(reg);console.log(obj);

输出结果为["a"],并不会真正的去匹配一个字符,
而是匹配位置关系,本例中是匹配的a必须后面跟上一个b才行

修饰符


其中i是大小写不区分,英文是ignore case,g是global,m是multiply多的,
多行匹配只有在匹配文本开头^和结束&,并且匹配的字符存在换行符时才能看的到效果
例子:
var str = 'ab\r\nacd';var reg = /^a.*/g;var obj = str.match(reg);console.log(obj);
只能匹配到一个["ab"],下面更改模式为/gm
<span style="font-size:18px;">var str = 'ab\r\nacd';var reg = /^a.*/gm;var obj = str.match(reg);console.log(obj);</span>

输出字符为["ab","acd"],这里在Windows中文条件下的换行是\r\n,
这里用了多行匹配所有的行头是a的字符串都被匹配下来了

String 的match()和RegExp的exec()方法的比较

两个都是返回一个数组对象,其中exec()方法还会在数组对象中增加两个属性,input和index,
而match()方法就是放回一个数组,还有个点就是,当match()执行的正则只还有全局匹配或是
只含有子表达式时,match()方法放回的数组里面都会去执行子匹配或是子表达式的匹配,
当含有两个时,就只执行全局匹配。
例子
var str = 'abab';var reg = /ab/g;var obj = str.match(reg);console.log(obj);//["ab", "ab"]var str = 'ab';var reg = /a(b)/;var obj = str.match(reg);console.log(obj);//["ab", "b", index: 0, input: "ab"]var str = 'ab';var reg = /a(b)/g;var obj = str.match(reg);console.log(obj);//["ab"]

而exec()方法会执行子匹配和全局匹配
var str = 'abab';var reg = /a(b)/g;for(var i=0;i<3;i++){var obj = reg.exec(str);console.log(obj);}
exec(输出的数组第一个元素后的元素怎么样都是子匹配的结果。
1 0
原创粉丝点击