js之正则表达式

责编:menVScode 2017-08-31 23:53 阅读(904)

1、创建正则实例化对象方式

        字面量方式:通过两个反斜杠“/”,/模式/修饰符;

        构造函数方式:通过new RegExp(模式,修饰符);

var str = "wwww22222";
var exp = /[0-9]/;//该模式只要求当前一个字符必须是0-9之间,匹配的是局部
		//从左往右匹配,若第一个匹配不到,那就匹配第二个...
console.log(exp.test(str));//true

var str1 = "wwww22222";
var exp1 = /^[a-z 0-9 A-Z]$/i; //^ $:匹配全部
console.log(exp1.test(str1));//false

        例子:匹配座机号码:区号+座机号,如0571-99998888;

//0开始,3或4个数字;-;7或8个数字;
var str = '0571-99998888';
var exp = /0\d{2,3}-\d{7,8}/;
console.log(exp.test(str));//true
//这种模式也会匹配0571-99998888ppp
var exp2 = /^0\d{2,3}-\d{7,8}$/; //换成这种模式,匹配全部

        例子:判断字符串是否是合法的数字,正数、负数、小数点,需求如下:

        #负数   前面"-",只出现一次;

        #小数    数字字符中" . ",出现一次;

        #如果第一个字符是0,0只能出现一次,要不0后面必须跟随" . ",不能有其他数字;

var str="0.a1"; 
var  exp=/^-?(0(\.\d*[1-9])?|[1-9]\d*(\.\d+)?)$/;    //    \w
alert(exp.test(str));


2、正则表达式知识点

        [ ]: 一个字符的范围

        ^ $:匹配全部

        正则表达式默认区分大小写

        i 修饰符:让正则模式不区分大小写

        \d:  等价[0-9] 

        {number}:设置匹配字符数量

        \w:等价  [0-9 a-z A-Z]

        +:  代表1个-n个之间的字符

        .: 在正则中代码任意字符   需要转义\.

        ?:  要不就没有  要不就出现一次

        *: 代表0个-n个之间的字符

        g:修饰符   匹配全局


3、正则对象的方法

        test()

        字符串的方法:search()、 replace()、match()、split(),这几个方法参数支持正则模式。

        strObj.search( regexp ):检查字符串与当前的正则模式所匹配的子字符串首次出现的位置,返回匹配成功子字符串的位置;若没有的话,则返回-1。

var str="javascript";
console.log(str.search(/script/));//下标为:4
if(str.search(/script/)!==-1){
    console.log("通过");
}

        strObj.replace( regexp,newStr | fn )检查字符串与正则模式所匹配的子字符串,并替换。

//键字的屏蔽
var str="小明说:你他妈的在看我一眼,我就打死你"; 
console.log(str.replace(/他妈的|死|打/g,"**"));//小明说:你**在看我一眼,我就****你

        如果第二参数是函数,那么当前函数的返回值就是要替换的内容;函数有两个参数:第一个是正则模式所匹配到子字符串,第二个是正则模式所匹配到子字符串中的表达式的字符串,表达式是指正则中用括号“()”括起来的内容。

var str="[0]如果你爱我.[1]如果我也爱你. 那我们就在一起吧";
var arr = ['恰好','恰好'];
str.replace(/\[(\d+)\]/g,function(a,b){
	console.log(a);//[0] [1]
	console.log(b);//0 1
        console.log(arguments);//["[0]", "0", 0, "[0]如果你爱我.[1]如果我也爱你. 那我们就在一起吧"] ["[1]", "1", 9, "[0]如果你爱我.[1]如果我也爱你. 那我们就在一起吧"]
        return arr[b];    //b:0 2
});
/*-----------*/
var str="[0]如果你爱我.[1]如果我也爱你. 那我们就在一起吧";
function format(){
	var arg=arguments;
	return str.replace(/\[(\d+)\]/g,function(a,b){
	        return arg[b];     //b  0   1
	});
}
console.log(format("恰好","恰好"));//恰好如果你爱我.恰好如果我也爱你. 那我们就在一起吧

        strObj.match(regexp)检查字符串把与正则模式所匹配的子字符串,以数组的形式输出。

var str="0如果你爱我.1如果我也爱你. 那我们就在一起吧";
console.log(str.match(/\d/g));   //["0", "1"]

         strObj.split(regexp,n):切割字符串,返回数组格式的结果。第二个参数是限制返回的数组长度。

var str="如果你111爱我.2222如果我也爱你333 那我们就在一起吧";
console.log(str.split(/\d+/g));//["如果你", "爱我.", "如果我也爱你", " 那我们就在一起吧"]
console.log(str.split(/\d+/g,2));//["如果你", "爱我."]

        exec():查找当前字符串与正则模式所匹配的文本,最终存储在数组里;匹配不成功返回null。

var user="{{1007}},{{1008}},{{1009}},{{1010}}";
var exp=/\{\{(\d+)\}\}/g;
var result=exp.exec(user)
console.log(result);//["{{1007}}", "1007", index: 0, input: "{{1007}},{{1008}},{{1009}},{{1010}}"]
console.log(result[0]); //{{1007}}
console.log(result[1]); //1007
//只返回了所匹配的一个
var user="{{1007}},{{1008}},{{1009}},{{1010}}";
var exp=/\{\{(\d+)\}\}/g;
while((result=exp.exec(user))!==null){
	console.log(result);
/*
	["{{1007}}", "1007", index: 0, input: "{{1007}},{{1008}},{{1009}},{{1010}}"]
	["{{1008}}", "1008", index: 9, input: "{{1007}},{{1008}},{{1009}},{{1010}}"]
	["{{1009}}", "1009", index: 18, input: "{{1007}},{{1008}},{{1009}},{{1010}}"]
	["{{1010}}", "1010", index: 27, input: "{{1007}},{{1008}},{{1009}},{{1010}}"]
*/	
	console.log(result[1]);
}
前端交流群: MVC前端网(menvscode.com)-qq交流群:551903636

邮箱快速注册

忘记密码