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 相关文章推荐
extjs中grid中嵌入动态combobox的应用
Jan 01 Javascript
全面理解面向对象的 JavaScript(来自ibm)
Nov 10 Javascript
JQuery 控制内容长度超出规定长度显示省略号
May 23 Javascript
JavaScript获取网页中第一个链接ID的方法
Apr 03 Javascript
JavaScript的函数式编程基础指南
Mar 19 Javascript
利用Node.js+Koa框架实现前后端交互的方法
Feb 27 Javascript
jquery中关于bind()方法的使用技巧分享
Mar 30 jQuery
AngularJs实现聊天列表实时刷新功能
Jun 15 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
Vue快速实现通用表单验证功能
Dec 05 Javascript
微信小程序实现下滑到底部自动翻页功能
Mar 07 Javascript
JavaScript观察者模式原理与用法实例详解
Mar 10 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
用Flash图形化数据(二)
2006/10/09 PHP
小偷PHP+Html+缓存
2006/12/20 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
Python3写入文件常用方法实例分析
2015/05/22 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Django小白教程之Django用户注册与登录
2016/04/22 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
基于使用paramiko执行远程linux主机命令(详解)
2017/10/16 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
python opencv摄像头的简单应用
2019/06/06 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
辣妈辣妹观后感
2015/06/10 职场文书
青涩记忆观后感
2015/06/18 职场文书
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
MySQL 开窗函数
2022/02/15 MySQL