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 相关文章推荐
FF IE兼容性的修改小结
Sep 02 Javascript
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
jQuery DOM插入节点操作指南
Mar 03 Javascript
js实现倒计时及时间对象
Nov 15 Javascript
Vue原理剖析 实现双向绑定MVVM
May 03 Javascript
深入理解JavaScript 参数按值传递
May 24 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
layui的table中显示图片方法
Aug 17 Javascript
JavaScript常用事件介绍
Jan 21 Javascript
vue2.0实现列表数据增加和删除
Jun 17 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 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判断用户是否手机访问代码
2015/06/08 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
文本加密解密
2006/06/23 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
js使用递归解析xml
2014/12/12 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
浅谈对yield的初步理解
2017/05/29 Python
Python使用django搭建web开发环境
2017/06/09 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
2020/07/01 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
模具专业自荐信
2014/05/29 职场文书
财务工作个人总结
2015/02/27 职场文书
实习班主任自我评价
2015/03/11 职场文书
会计求职自荐信
2015/03/26 职场文书
小平您好观后感
2015/06/09 职场文书
停发工资证明范本
2015/06/12 职场文书