JavaScript中两个字符串的匹配
来源: 阅读:839 次 日期:2016-06-18 13:30:16
温馨提示: 小编为您整理了“JavaScript中两个字符串的匹配”,方便广大网友查阅!

本文分享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;

}

其中*最起码为一个字符,以上程序并没有对输入的合法性进行验证

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map