玩转javascript RegExp对象
玩转javascript RegExp对象
js中的正则表达式
js的正则表达式
语法极大地借鉴了另一种脚本语言Perl的正则表达式
语法.
RegExp对象是js的一个内置对象,与String,Array类似。
创建RegExp对象
可通过
构造函数RegExp()
创建。---当要根据用户输入来构造正则表达式时,必须采用构造函数方式。var re=new RegExp("\\b","gi");
需要注意的是\b这个特殊字符在js中表示退格,在正则表达式中特殊字符之前需要再加一个反斜杠,因此变成了\\b,正则表达式作为参数传给RegExp()构造函数,属性字符g,i,m作为构造函数的第二个参数.
可通过
字面量语法
创建,例:var re=/\d\d/;
其中
斜杠(/)
表示正则表达式的开始和结束。告诉js,这是一个正则表达式,就像引号是字符串的开始和结束一样的.
语法
var patt=new RegExp(pattern,modifiers); 或者更简单的方式: var patt=/pattern/modifiers;
- pattern(模式) 描述了表达式的模式
modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配
- G---
全局匹配
,查找所有与模式匹配的子串,而不是在找到第一个匹配的字符后就停止 - I---模式
不区分大小写
。如:Paul与paul被看做相同的字符模式。 - m---多行标志。制定特殊字符^和$可以匹配多行文本和字符串的开始和结束
- G---
正则表达式和String对象的split()-返回数组
,match-返回数组
,search()-返回索引,在正则表达式中也只能找到第一个匹配的字符组,全局匹配对它无效
,replace()-替换
结合使用才能发挥它的强大功能。
具体的正则表达式特殊字符就不在此列举了(太多了)。
简单的实例
我们就举几个简单的例子了解一下正则表达式的功能实现
实例1. 要匹配1-800-888-5474的电话号码,使用正则表达式:
var a="1-800-888-5474"; var re=/\d-\d{3}-\d{3}-\d{4}/gi; var b=a.match(re); console.log("b:"+b);
后台输出b:1-800-888-5474,d{3}表示出现三个数字,{n}表示前一项出现n次,?表示前一项出现0次或1次
实例2.
var a="1997,1998,2000,2001,2002,2000,paul,paula,paulab,pau"; var b=a.match(/2000?1?2?/gi); var d=a.match(/paul?a?b?/gi); var e=a.replace(/2000?1?2?/gi,"2017") var f=a.replace(/paul?a?b?/gi,"room") console.log("b:"+b); console.log("d:"+d); console.log("e:"+e); console.log("f:"+f);
输出结果如下:
示例中,
b:输出19世纪的年份组成的数组
d:输出所有含有pau字符组成的数组
e:把字符串中的19世纪年份全替换为2017年
f:把字符串中含有pau的字符串全部替换为room.
实例3. 位置字符\b,\B的深入理解
var a="hello world,I am a girl."; var re1=/\b/gi; var re2=/\B/gi; var b=a.replace(re1,"|"); var c=a.replace(re2,"|"); console.log("b:"+b); console.log("c:"+c);
结果如下:
可以从结果中看出:\b的位置是在单词的前后(单词字符与非单词字符之间的位置),\B的位置在单词的前后,除却了\b位置,剩余的所有位置。
实例4. 正则表达式的分组
如何实现分组的,只需要将它们放在()
中,正则表达式中的()是将字符模式组合起来的特殊字符,圆括号本身不是要匹配的字符。
如:
var s="javascript,vbscript and php";
要求用同一个正则表达式匹配javascript和vbscript.
var s="javascript,vbscript and php"; var re=/\b(vb|java)script\b/gi; s=s.replace(re,"aa"); alter(s);
其中|
,是分组里面的特殊字符,和||(或)
的含义是一样的。
实例5:单引号
替换双引号
var re=/\B'|'\B/gi;
实例6:使用$引用分组
var a="2012,2013,2014" //把a修改为"2012年,2013年,2014年" var re=/(\d{4})/gi; //就可以在替换的字符中使用序号1的分组了: a=a.replace(re,"$1年"); //输出2012年,2013年,2014年。
还有其他的方法可以实现,这个我觉得相对简便一些,具体的用法还要在实际项目中使用。