JavaScript中两个字符串的匹配


Posted in Javascript onJune 08, 2016

工作中遇到一个问题,两个字符串匹配,要求:每个字符串中最多含有一个*,?可以无限多个

*代表一个任意长度的字符串,而?则代表一个字符

要求可以提示出两个冲突

<input type="text" id="str1"><br>

<input type="text" id="str2"><br>

<input type="button" onclick="checkMarchX()" value="CHECK">

用JavaScript实现代码如下:

function checkMarchX()
{
	var str1 = document.getElementById('str1').value;
	var str2 = document.getElementById('str2').value;
	var str1XPosition = str1.indexOf('*');
	var str2XPosition = str2.indexOf('*');
	if(str1XPosition!=-1 && str2XPosition!=-1)//两者都含有*
	{
		var position = str1XPosition>str2XPosition?str2XPosition:str1XPosition;//success
		if(position!=0)
		{
			var patbeforeStr1 = str1.substring(0,position);
			var patbeforeStr2 = str2.substring(0,position);
			if(checkMarchQ(patbeforeStr1,patbeforeStr2))
			{
				//alert(str1+'与'+str2+"前半部分冲突");
				//然后对应后半部分进行测试
				var str1XBackPosition = str1.length-str1XPosition-1;
				var str2XBackPosition = str2.length-str2XPosition-1;
				var backposition = str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition;
				if (backposition==0)
				{
					alert(str1+'与'+str2+"冲突");
				}
				else
				{
					var patbackStr1 = str1.substring(str1.length-backposition,str1.length);
					var patbackStr2 = str2.substring(str2.length-backposition,str2.length);
					if(checkMarchQ(patbackStr1,patbackStr2))
					{
						alert(str1+'与'+str2+"冲突");
					}
				}
			}
		}
		else
		{
			//alert(str1+'与'+str2+"前半部分冲突");
			var str1XBackPosition = str1.length-str1XPosition-1;
			var str2XBackPosition = str2.length-str2XPosition-1;
			var backposition = str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition;
			if (backposition==0)
			{
				alert(str1+'与'+str2+"冲突");
			}
			else
			{
				var patbackStr1 = str1.substring(str1.length-backposition,str1.length);
				var patbackStr2 = str2.substring(str2.length-backposition,str2.length);
				if(checkMarchQ(patbackStr1,patbackStr2))
				{
					alert(str1+'与'+str2+"冲突");
				}
			}
		}
	}
	else if((str1XPosition==-1 && str2XPosition!=-1)||(str1XPosition!=-1 && str2XPosition==-1))//有且只有一个字符串含有*
	{
		var strX = str1XPosition==-1?str2:str1;//含有*的字符串
		var strNoX = str1XPosition==-1?str1:str2;//不含*的字符串
		if (strX.length-1<strNoX.length)
		{
			var position = strX.indexOf('*');
			if(position==0)
			{
				//alert(str1+'与'+str2+"前半部分冲突");
				var backposition = strX.length-position-1;
				if (backposition==0)
				{
					alert(str1+'与'+str2+"冲突");
				}
				else
				{
					var patbackStr1 = str1.substring(str1.length-backposition,str1.length);
					var patbackStr2 = str2.substring(str2.length-backposition,str2.length);
					if(checkMarchQ(patbackStr1,patbackStr2))
					{
						alert(str1+'与'+str2+"冲突");
					}
				}
			}
			else
			{
				var patbeforeStr1 = str1.substring(0,position);
				var patbeforeStr2 = str2.substring(0,position);
				if(checkMarchQ(patbeforeStr1,patbeforeStr2))
				{
					//alert(str1+'与'+str2+"前半部分冲突");
					var backposition = strX.length-position-1;
					if (backposition==0)
					{
						alert(str1+'与'+str2+"冲突");
					}
					else
					{
						var patbackStr1 = str1.substring(str1.length-backposition,str1.length);
						var patbackStr2 = str2.substring(str2.length-backposition,str2.length);
						if(checkMarchQ(patbackStr1,patbackStr2))
						{
							alert(str1+'与'+str2+"冲突");
						}
					}
				}
			}
		}
	}
	else
	{
		if(checkMarchQ(str1,str2))
		{
			alert(str1+'与'+str2+"冲突");
		}
	}
}
function checkMarchQ(str1,str2)
{
	var flagque = false;
	if(str1.length==str2.length)
	{
	  //长度相同才有可能冲突
		for (var i=0 ;i<str1.length ;i++ )
		{
			if(str1.substr(i,1)!='?' && str2.substr(i,1)!='?')
			{
				if(str1.substr(i,1)!=str2.substr(i,1))
				{
					flagque = false;//表示不冲突
					break;
				}
				else
				{
					flagque = true;//表示冲突
				}
			}
		}
	}
	return flagque;
}

其中*最起码为一个字符,以上程序并没有对输入的合法性进行验证

查看更多JavaScript的语法,大家可以关注:《JavaScript 参考教程》、《JavaScript代码风格指南》,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
date.parse在IE和FF中的区别
Jul 29 Javascript
读jQuery之十一 添加事件核心方法
Jul 31 Javascript
jQuery动态地获取系统时间实现代码
May 24 Javascript
浅析JavaScript中的同名标识符优先级
Dec 06 Javascript
理解javascript正则表达式
Mar 08 Javascript
BOM系列第二篇之定时器requestAnimationFrame
Aug 17 Javascript
深入理解Node.js的HTTP模块
Oct 12 Javascript
在vue项目中使用Nprogress.js进度条的方法
Jan 31 Javascript
Vue-cli3项目配置Vue.config.js实战记录
Jul 29 Javascript
JavaScript日期工具类DateUtils定义与用法示例
Sep 03 Javascript
详解如何为你的angular app构建一个第三方库
Dec 07 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
Oct 28 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
Jun 08 #Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
Jun 08 #Javascript
玩转JavaScript OOP - 类的实现详解
Jun 08 #Javascript
Javascript之String对象详解
Jun 08 #Javascript
浅谈JavaScript函数的四种存在形态
Jun 08 #Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
Jun 08 #Javascript
关于session和cookie的简单理解
Jun 08 #Javascript
You might like
PHP修改session_id示例代码
2014/01/08 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
jquery编写日期选择器
2017/03/16 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
跟老齐学Python之复习if语句
2014/10/02 Python
python下载文件时显示下载进度的方法
2015/04/02 Python
独特的python循环语句
2016/11/20 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
Python gevent协程切换实现详解
2020/09/14 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
关于人生的感言
2014/01/17 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
学校募捐倡议书
2014/05/14 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
二婚主持词
2015/06/30 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
信息技术课教学反思
2016/02/23 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书