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 相关文章推荐
读jQuery之八 包装事件对象
Jun 21 Javascript
js实现双向链表互联网机顶盒实战应用实现
Oct 28 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 Javascript
js window.onload 加载多个函数和追加函数详解
Jan 08 Javascript
如何用jquery控制表格奇偶行及活动行颜色
Apr 20 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
Oct 05 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
Jan 04 Javascript
详解如何使用微信小程序云函数发送短信验证码
Mar 13 Javascript
vue路由守卫+登录态管理实例分析
May 21 Javascript
关于Layui Table隐藏列问题
Sep 16 Javascript
微信小程序连续签到7天积分获得功能的示例代码
Aug 20 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数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
PHP中常用的转义函数
2014/02/28 PHP
php防止sql注入简单分析
2015/03/18 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
PHP fclose函数用法总结
2019/02/15 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
Python3+Appium安装使用教程
2019/07/05 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
网络编辑岗位职责范本
2014/02/10 职场文书
信用卡工资证明范本
2015/06/19 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
签约仪式致辞
2015/07/30 职场文书