JavaScript中两个字符串的匹配
作者:meaijojo 发布时间:2023-08-08 00:46:01
标签:JavaScript,字符串
工作中遇到一个问题,两个字符串匹配,要求:每个字符串中最多含有一个*,?可以无限多个
*代表一个任意长度的字符串,而?则代表一个字符
要求可以提示出两个冲突
<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;
}
其中*最起码为一个字符,以上程序并没有对输入的合法性进行验证
0
投稿
猜你喜欢
- 本文记录了NLTK 3.2.4 环境搭建的方法,供大家参考,具体内容如下系统环境:win7 32位python:2.7.13,后改为3.6.
- 本文实例讲述了Python高级变量类型。分享给大家供大家参考,具体如下:目标列表元组字典字符串公共方法变量高级知识点回顾Python 中数据
- 目录引用dll静态类定时器启动备份代码总结引用dllmysql.data.dll是MySQL数据库中一款必备的驱动文件,主要用于.net编程
- 本文实例为大家分享了微信小程序实现顶部搜索框的具体代码,供大家参考,具体内容如下这是一个最简单的顶部搜索框,代码如下wxml<view
- (1)、函数y = sin(x)(2)、数据准备#数据准备X=np.arange(-np.pi,np.pi,1) #定义样本点X,从-pi到
- 最近发生了很多事情,工作不开心,爱情无果而终,身边的小伙伴陆陆续续离职。虽然都不是会一下子击垮自己的事情,但是积攒起来,还是会有突然感到疲惫
- 代码如下Control:from django.conf.urls import patterns, include, urlfrom dj
- 这是我记得的问题,基本都没答上来,大家知道的教教小弟,咱不能再不会了 1.在js里类的继承一般是类抄写和原型继承混合使用,在extjs的ex
- Liwu_Items表,CreateTime列建立聚集索引 第一种,sqlserver2005特有的分页语法 代码如下:declare @p
- Celery简介Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度
- 下标所谓下标就是编号,就好比超市中存储柜的编号,通过这个编号就能找到相应的存储空间。Python中字符串,列表,元祖均支持下标索引。例如:#
- 正则表达式是一种进行模式匹配和文本操纵的功能强大的工具。正则表达式灵活、易用,按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出
- 以前装过sql server,后来删掉。现在重装,却出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动
- 在JavaScript前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”。1..停止事件冒泡//
- open 遍历一个大日志文件使用 readlines() 还是 readline() ?总体上 readlines() 不慢于python
- 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联
- 如果要得到返回值,需要用Command的方法。 首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那
- 前言拓扑排序是图论中一种重要的排序算法,用于对有向无环图(DAG)进行排序。在拓扑排序中,图的顶点表示任务,有向边表示任务之间的依赖关系。拓
- Python DataFrame 如何设置列表字段/元素类型?比如笔者想将列表的两个字段由float64设置为int64,那么就要用到Dat
- python中向上取整可以用ceil函数,ceil函数是在math模块下的一个函数。向上取整需要用到 math 模块中的 ceil() 方法