Matching of two strings in JavaScript
- 2021-06-28 08:28:32
- OfStack
There was a problem in the work, two strings matched, which requires that each string contain at most one *, ?Can be infinite
* stands for a string of any length, ?Represents a character
Request can suggest two conflicts
<input type="text" id="str1"><br>
<input type="text" id="str2"><br>
<input type="button" onclick="checkMarchX()" value="CHECK">
The code implemented with JavaScript is as follows:
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)// Both contain *
{
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+' and '+str2+" First half conflict ");
// Then test the second half
var str1XBackPosition = str1.length-str1XPosition-1;
var str2XBackPosition = str2.length-str2XPosition-1;
var backposition = str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition;
if (backposition==0)
{
alert(str1+' and '+str2+" conflict ");
}
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+' and '+str2+" conflict ");
}
}
}
}
else
{
//alert(str1+' and '+str2+" First half conflict ");
var str1XBackPosition = str1.length-str1XPosition-1;
var str2XBackPosition = str2.length-str2XPosition-1;
var backposition = str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition;
if (backposition==0)
{
alert(str1+' and '+str2+" conflict ");
}
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+' and '+str2+" conflict ");
}
}
}
}
else if((str1XPosition==-1 && str2XPosition!=-1)||(str1XPosition!=-1 && str2XPosition==-1))// Yes and only 1 String contains *
{
var strX = str1XPosition==-1?str2:str1;// Contain * String of
var strNoX = str1XPosition==-1?str1:str2;// Does not contain * String of
if (strX.length-1<strNoX.length)
{
var position = strX.indexOf('*');
if(position==0)
{
//alert(str1+' and '+str2+" First half conflict ");
var backposition = strX.length-position-1;
if (backposition==0)
{
alert(str1+' and '+str2+" conflict ");
}
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+' and '+str2+" conflict ");
}
}
}
else
{
var patbeforeStr1 = str1.substring(0,position);
var patbeforeStr2 = str2.substring(0,position);
if(checkMarchQ(patbeforeStr1,patbeforeStr2))
{
//alert(str1+' and '+str2+" First half conflict ");
var backposition = strX.length-position-1;
if (backposition==0)
{
alert(str1+' and '+str2+" conflict ");
}
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+' and '+str2+" conflict ");
}
}
}
}
}
}
else
{
if(checkMarchQ(str1,str2))
{
alert(str1+' and '+str2+" conflict ");
}
}
}
function checkMarchQ(str1,str2)
{
var flagque = false;
if(str1.length==str2.length)
{
// Conflict is possible only if the length is the same
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;// Indicates no conflict
break;
}
else
{
flagque = true;// Represent Conflict
}
}
}
}
return flagque;
}
The above program does not validate the validity of the input.