首页 > web前端 > js教程 > 正文

JavaScript中两个字符串的匹配

高洛峰
发布: 2016-11-26 14:42:17
原创
1521人浏览过

工作中遇到一个问题,两个字符串匹配,要求:每个字符串中最多含有一个*,?可以无限多个

*代表一个任意长度的字符串,而?则代表一个字符

要求可以提示出两个冲突

<input type="text" id="str1"><br>
<input type="text" id="str2"><br>
<input type="button" onclick="checkMarchX()" value="CHECK">
用Javascript实现代码如下:

[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; 
    } 

立即学习Java免费学习笔记(深入)”;

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

相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号