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 相关文章推荐
对象特征检测法判断浏览器对javascript对象的支持
Jul 25 Javascript
js实现的日期操作类DateTime函数代码
Mar 16 Javascript
JS验证身份证有效性示例
Oct 11 Javascript
倒记时60刷新网页的js代码
Feb 18 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
Mar 26 Javascript
JS简单模拟触发按钮点击功能的方法
Nov 30 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
Aug 01 Javascript
JS html时钟制作代码分享
Mar 03 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 Javascript
微信小程序mpvue点击按钮获取button值的方法
May 29 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
Jun 03 Javascript
Element Cascader 级联选择器的使用示例
Jul 27 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学习之整理字符串
2011/04/17 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
JS的数组迭代方法
2015/02/05 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
好的自荐信的要求
2013/10/30 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
暑期培训随笔感言
2014/03/10 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
布达拉宫的导游词
2015/02/02 职场文书
2015年端午节活动总结
2015/02/11 职场文书
学生逃课检讨书
2015/02/17 职场文书
校长一岗双责责任书
2015/05/09 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
Redis实现一个账号只能登录一个设备
2022/04/19 Redis