常用正则表达式

验证格式时一般要求首尾匹配
1.去除字符串首尾空白字符

var str = '   Alex   ';
var pattern = /^\s+|\s+$/g;//全局匹配是关键,也可以分别替换
console.log('|'+str.replace(pattern,'')+'|');

考虑到程序的优化,不一定非得使用一个全面的正则表达式

var str = '   Alex   ';
var pattern1 = /^\s+/;
var pattern2 = /\s+$/;
console.log('|'+str.replace(pattern1,'').replace(pattern2,'')+'|');

方法封装-工具

function trim(str){
	return str.replace(/^\s+/,'').replace(/\s+$/,'');
}

2.转驼峰

function toCamelCase(str){
	var pattern = /-(a-z)/ig;
	return str.replace(pattern,function(all,letter){
		return letter.toUpperCase();
	});
}

replace方法如果第二个参数是函数的话,那么函数的第一个参数代表的是正则匹配出来的内容,第二个参数表示分组()中的内容,但要注意它并不只是第一个分组内容,而是分组匹配到的所有内容!

var str = 'background-color-irom';
var pattern = /-([a-z])/ig;//全局匹配,分组可以匹配多个内容
console.log(str.replace(pattern,function(all,letter){
        console.log('letter---'+letter);
        return letter.toUpperCase();
    }));

letter—c,分组匹配到的第一个内容
letter—i,分组匹配到的第二个内容
backgroundColorIrom

3.匹配HTML标签

var str = '<p class="odd" id="odd">123</p>';//只匹配标签,不要内容
var pattern = /<\/?[a-zA-Z]+(\s+[a-zA-Z]+=".*")*>/g;//穷举法
console.log(str.match(pattern));

1.可能有一个或没有 ‘/’ --/
2.标签名为一个或多个字母 – [a-zA-Z]+
3.属性值都是由 空格+字母+等号+双引号+引号内的内容 组成,空格和字母有一个或多个(+),引号内容可能为空,整体可能有0个或多个

逆向思考:

var str = '<p class="odd" id="odd">123</p>';//只匹配标签,不要内容
var pattern = /<[^>]+>/g;//正则里可以有任何东西,但不能有>
console.log(str.match(pattern));

以上写法存在不允许的特例:

var str = '<input type="text" value=">" name="username">';//只匹配标签,不要内容
var pattern = /<[^>]+>/g;//正则里可以有任何东西,但不能有>
console.log(str.match(pattern));//["<input type="text" value=">"]

避免以上特例,再度采用穷举法:字符串由引号和引号之间的内容、引号之外的内容组成

var str = '<input type="text" value=">" name="username">';//只匹配标签,不要内容
var pattern = /<(?:[^"'>]|"[^"]*"|'[^']*')*>/g;//除了单双引号、右尖括号之外(引号外内容) 或者 双引号之间内容除了双引号之外 或者 单引号之间除了单引号之外(引号内内容可能有0个或多个)
//如果只写一个选择匹配,一次只能匹配一个,必须写成多个才能匹配整体--*;非捕获性分组
console.log(str.match(pattern));

利用引用进行简化:

var str = '<input type="text" value=">" name="username">';//只匹配标签,不要内容
var pattern = /<(?:[^"'>]|(["'])[^"']*\1)*>/g;//由于第一个分组为非捕获性的,所以可通过\1引用,即单双引号可选
console.log(str.match(pattern));

4.邮箱验证
先举出可能的实例,再分组搭架子(量词一起),再填入正则,最后删除不需要的括号、添加非捕获等

/^(?:\w+\.)*\w+@(?:\w+\.)+[a-z]+$/i
/^[a-z0-9]+(?:[_-.][a-z0-9]+)*@[a-z0-9]+(?:[_-.][a-z0-9]+)*\.[a-z]{2,4}$/i

5.URL验证
仅考虑http https
(ftp|http|https|mailto)// | file:///

(协议:\/\/)主机名(:端口号)/(路径)
/^(?:https?:\/\/)?[^:\/]+(?::\d+)?(?:\/.*)?$/

主机名详解

www.imos-oc.com//连字符只能出现在中间
/^(?:[a-z0-9]+\.|[a-z0-9]+[-a-z0-9]*[a-z0-9]*\.)*[a-z]+$/

正则汇总对象

var regExp = {
	'chinese':/\u4e00-\u9fa5/,
	'qq':/^[1-9]\d{4,}$/,//最少五位
	'html':/<\/?[a-zA-Z]+(\s+[a-zA-Z]+=".*")*>/g,//只匹配标签
	'html-1':/<(?:[^"'>]|(["'])[^"']*\1)*>/g,//只匹配标签
	'email':/^(?:\w+\.)*\w+@(?:\w+\.)+[a-z]+$/i,
	'email-1':/^[a-z0-9]+(?:[_-.][a-z0-9]+)*@[a-z0-9]+(?:[_-.][a-z0-9]+)*\.[a-z]{2,4}$/i,
	'URL':/^(?:https?:\/\/)?[^:\/]+(?::\d+)?(?:\/.*)?$/,//协议只考虑http https两种,主机名未细化
	'mainEngine':/^(?:[a-z0-9]+\.|[a-z0-9]+[-a-z0-9]*[a-z0-9]*\.)*[a-z]+$/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值