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 相关文章推荐
JS 判断代码全收集
Apr 28 Javascript
iphone safari不支持position fixed的解决方法
May 04 Javascript
js的hasownproperty使用示例
Mar 02 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
Jun 24 Javascript
使用phantomjs进行网页抓取的实现代码
Sep 29 Javascript
jQuery实现的五子棋游戏实例
Jun 13 Javascript
js实现的倒计时按钮实例
Jun 24 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
JavaScript获取各大浏览器信息图示
Nov 20 Javascript
JS点击缩略图整屏居中放大图片效果
Jul 04 Javascript
Vue响应式原理Observer、Dep、Watcher理解
Jun 06 Javascript
jQuery实现简单弹幕制作
Dec 10 jQuery
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 str_replace的替换漏洞
2008/03/15 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
零基础写python爬虫之神器正则表达式
2014/11/06 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
python读取和保存图片5种方法对比
2018/09/12 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
六行python代码的爱心曲线详解
2019/05/17 Python
详解python播放音频的三种方法
2019/09/23 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
民族团结演讲稿范文
2014/08/27 职场文书
学生犯错保证书
2015/05/09 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
学习委员竞选稿
2015/11/20 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书