JS封装的正则表达式

/*
**	2013-8-26 02:04:01
**	jkr对象提供四个方法
**	
**	isMatch
**		语法:		boolean jkr.isMatch(正则表达式, 字符串);
**		功能:		检查是否匹配,匹配上返回true
**		案例:
**			var isTrue = jkr.isMatch(/^\d+/, '1a');
**			alert(isTrue);
**	match	
**		语法:		object jkr.match(正则表达式, 字符串);
**		功能:		将字符串中匹配到的第一个字符串提取出来
**					返回对象具有
**						success			属性,表示是否匹配成功
**						index			属性,匹配字符串在原始字符串中的位置
**						value			属性,匹配到的字符串
**						length			属性,匹配到的字符串的长度
**						groups			方法,根据索引获得匹配到的组
**						groups.count	属性,匹配到组的个数
**		案例:
**			var m = jkr.match(/^((.:).+\\)((.+)(\..+))$/, "C:\\1\\2\\3\\456.mp3");
**			alert(m.success);
**			if(m.success) {
**				alert("index = " + m.index + "\r\n"
**					+ "value = " + m.value + "\r\n"
**					+ "length = " + m.length + "\r\n"
**					+ "groups(0) = " + m.groups(0) + "\r\n"
**					+ "groups(1) = " + m.groups(1) + "      文件路径\r\n"
**					+ "groups(2) = " + m.groups(2) + "      根目录\r\n"
**					+ "groups(3) = " + m.groups(3) + "      文件名\r\n"
**					+ "groups(4) = " + m.groups(4) + "      无后缀文件名\r\n"
**					+ "groups(5) = " + m.groups(5) + "      后缀名\r\n"
**					+ "groups.count = " + m.groups.count 
**					);
**			}
**
**	matches
**		语法:		Array jkr.matches(正则表达式, 字符串);
**		功能:		将循环匹配字符串,并将匹配到的数据以数组的形式返回,数组的每一个成员具有
**						success			属性,表示是否匹配成功
**						index			属性,匹配字符串在原始字符串中的位置
**						value			属性,匹配到的字符串
**						length			属性,匹配到的字符串的长度
**						groups			方法,根据索引获得匹配到的组
**						groups.count	属性,匹配到组的个数
**		案例:
**			var mc = jkr.matches(/\d+(\d+)/, "1a23bc456");
**			for(var i in mc) {
**				var m = mc[i];
**				if(m.success) {
**					alert("index = " + m.index + "\r\n"
**						+ "value = " + m.value + "\r\n"
**						+ "length = " + m.length + "\r\n"
**						+ "groups(1) = " + m.groups(1) + "\r\n"
**						+ "groups.count = " + m.groups.count
**						);
**				}
**			}
**
**
**	replace
**		语法:		string jkr.replace(原始字符串, 正则表达式, 新字符串);
**		功能:		该方法对原始字符串使用正则表达式进行处理,并将匹配到的数据用新的字符串代替
**		案例:
**			var str = "2013年8月25日";
**			var res = jkr.replace(str, /(\d+)年(\d+)月(\d+)日/, "$1-$2-$3");
**			alert(res);
**
*/
(function(window) {
	var Regex = {
		isMatch	:	function(regex, input) {
						// 匹配的方法,返回boolean类型
						if( !(regex instanceof RegExp) || typeof input !== 'string' ) /* throw {msg:"参数不正确"}; // 考虑使用异常*/ return false;
						return regex.test(input);
					},
		match	:	function(regex, input) {
						// 匹配提取,将结果返回
						if( !(regex instanceof RegExp) || typeof input !== 'string' ) throw {msg:"参数不正确"}; 
						var m = regex.exec(input); 
						// 封装一个match对象,里面有一个groups集合,和value属性以及index属性与length属性等
						var _m = {
										success	:	!!m, // 如果没有匹配m为null
										index	:	m ? m.index : 0,
										length	:	m ? m[0].length : 0,
										value	:	m ? m[0] : null,
										groups	:	function(i) {
														if(!m) return [];
														if( i > m.length - 1 ) throw {msg:"超出数组索引范围"};
														return m[i];
													}
									};
						_m.groups.count = m ? m.length : 0;
						return _m;
					},
		matches	:	function(regex, input) {
						// 匹配所有内容返回matchCollection
						if( !(regex instanceof RegExp) || typeof input !== 'string' ) throw {msg:"参数不正确"}; 
						// 保证支持全局模式
						var r = regex.toString();
						var that = this;
						regex = this.isMatch(/g[^\/]*$/i, r) 
									? 	regex 
									: 	(function() {
											var m = that.match(/\/([^\/]+)\/(.*)/, r);
											return new RegExp(m.groups(1), m.groups(2) + "g");
										})();
						// 准备集合
						var matchCollection = [];
						// 循环匹配装配集合
						
						do {
							var temp = this.match(regex, input);
							matchCollection[matchCollection.length] = temp;
						} while(temp.success);
						
						return matchCollection;
					},
		replace	:	function(oldStr, regex, newStr) {
						if(typeof oldStr === 'string' && typeof newStr === 'string' && regex instanceof RegExp) {
							return oldStr.replace(regex, newStr);
						} else {
							throw {msg : "参数信息错误"};
						}
					}
	};
	window.jkr = Regex;
})(window);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值