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 Onunload与Onbeforeunload使用小结
Dec 31 Javascript
仿新浪微博返回顶部的jquery实现代码
Oct 01 Javascript
Js与下拉列表处理问题解决
Feb 13 Javascript
jQuery对象初始化的传参方式
Feb 26 Javascript
JavaScript中的时间处理小结
Feb 24 Javascript
判断JS对象是否拥有某属性的方法推荐
May 12 Javascript
laypage分页控件使用实例详解
May 19 Javascript
jQuery实现的无限级下拉菜单功能示例
Sep 12 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
Oct 28 Javascript
利用Ionic2 + angular4实现一个地区选择组件
Jul 27 Javascript
JS和JQuery实现雪花飘落效果
Nov 30 jQuery
Webpack打包字体font-awesome的方法示例
Apr 26 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/08/06 PHP
PHP面向对象概念
2011/11/06 PHP
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
php mail to 配置详解
2014/01/16 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
JavaScript中的事件处理
2008/01/16 Javascript
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
javascript 取小数点后几位几种方法总结
2017/08/02 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
Python中subprocess的简单使用示例
2015/07/28 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
Python多继承顺序实例分析
2018/05/26 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
如何用Python绘制3D柱形图
2020/09/16 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
本科生详细的自我评价
2013/09/19 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
人民的好儿女观后感
2015/06/18 职场文书
律师催款函范文
2015/06/24 职场文书
大学生受助感言
2015/08/01 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL