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
- Js正则表达式
- js常用正则表达式
- JS常用正则表达式
- JS正则表达式
- JS的正则表达式
- JS的正则表达式
- JS的正则表达式
- JS正则表达式
- JS正则表达式
- JS中正则表达式
- JS的正则表达式
- JS的正则表达式
- JS的正则表达式
- JS的正则表达式
- JS的正则表达式
- Js中的正则表达式
- JS的正则表达式
- JS的正则表达式
- Android创建简单的Launcher应用程序(二)
- hdoj 4408 Minimum Spanning Tree 求最小生成树的数目
- C语言代码实例
- 数据结构实验之二叉树三:统计叶子数
- Eclipse neon +Hibernate5+maven创建小例子
- js正则表达式
- iOS多个UILabel添加同一个单击手势,如何确定用户点击的是哪个UILabel (swift3.0)
- Component Tree
- CF 2B The least round way
- Qt多窗口来回切换实战
- 用verilog设计一个交通信号灯,要求有红,黄,绿,左转四盏灯
- Java数据结构——线性表的顺序存储实现
- ArrayList源码解读
- 正则表达式的逻辑关系