当前位置: 代码迷 >> JavaScript >> ==========惭愧,正则太差,虚心向高手请问==========
  详细解决方案

==========惭愧,正则太差,虚心向高手请问==========

热度:174   发布时间:2012-05-24 11:55:41.0
==========惭愧,正则太差,虚心向高手请教==========
JScript code


    var s = [];
    function op(str) {
        s.push(str);
        var p = s.join("");
        //如果p字符串满足这样的要求:以'['开始并且以']'结束,则我想获取位于[]之间的数据
        //例当前p="[1welcome][2china][welcome t";
        //我想获取1welcome以及2china,并且将[1welcome]和[2china]从p中删除或替换为空字符''
        //将余下部分[welcome t保留
        //这样结果就是p="[welcome t"
        //可以使用console.log();打印匹配结果
    };

    //测试用例
    op("[welcome to china]"); //这样调用p等于'',打印出welcome to china
    op("[welcome t");   //这样调用p="[welcome t"
    op("o china][wel"); // 这样调用p="o china][wel"
    op("[1welcome][2china][welcome t"); //这样调用打印出1welcome,2china,p="[welcome t"




不知道我是否已经描述清楚了,正则一直学的不好,请大家帮帮忙了。谢谢。

------解决方案--------------------
javascript不支持前宽断言的,我也想看看有无高手可以一步到位做到。
------解决方案--------------------
replace可以有回调的,你可以这样
JScript code
<script>
var s = [];                    
function op(str) {             
        var p = str;           
        //s.push(str);         
        //var p = s.join("");  
        //如果p字符串满足这样的要求:以'['开始并且以']'结束,则我想获取位于[]之间的数据
        //例当前p="[1welcome][2china][welcome t";
        //我想获取1welcome以及2china,并且将[1welcome]和[2china]从p中删除或替换为空字符''
        //将余下部分[welcome t保留
        //这样结果就是p="[welcome t"
        //可以使用console.log();打印匹配结果
        var rt = [];           
        p = p.replace(/\[([^\]]*)\]/g,function($_0,$_1){
                rt[rt.length] = $_1;
                return '';     
        })                     
        alert('Match:'+rt.join(','))
        return p;              
};

alert("p="+op("[welcome to china]")); //这样调用p等于'',打印出welcome to china
alert("p="+op("[welcome t"));   //这样调用p="[welcome t"
alert("p="+op("o china][wel")); // 这样调用p="o china][wel"
alert("p="+op("[1welcome][2china][welcome t")); //这样调用打印出1welcome,2china,p="[welcome t"
</script>

------解决方案--------------------
正则不是很会。。帮你顶下

------解决方案--------------------
探讨

replace可以有回调的,你可以这样
JScript code
<script>
var s = [];
function op(str) {
var p = str;
//s.push(str);
//var p = s.join(""……

------解决方案--------------------
JScript code

function op(str)
{
    var tmp;
    var rep =/\[([^\]]+)\]/g
    var ret ={
            count    :    0,
            result    :    [],
                rightContext:""
        };
                    
    while((tmp=rep.exec(str))!==null){
        ret.result.push(tmp[1])
        ret.count++;
    }
    ret.rightContext=RegExp.rightContext;
    return ret;
}


op("[1welcome][2china][welcome t") 
// return {count : 2,    rightContext : "[welcome t",    result : [ 1welcome , 2china ] }

------解决方案--------------------
有点不太懂LZ的意思,你是想把op函数弄成有状态的还是没状态的?
1.有状态:
HTML code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <script>
        
    var s = [];
    function op(str) {
        var result = [];
        s.push(str);
        var p = s.join("");
        //如果p字符串满足这样的要求:以'['开始并且以']'结束,则我想获取位于[]之间的数据
        //例当前p="[1welcome][2china][welcome t";
        //我想获取1welcome以及2china,并且将[1welcome]和[2china]从p中删除或替换为空字符''
        //将余下部分[welcome t保留
        //这样结果就是p="[welcome t"
        //可以使用console.log();打印匹配结果
        p = p.replace(/\[([^\[\]]*)\]/g, function(){
            result.push(arguments[1]);
            return '';
        });
        console.log("p: " + p +"; result: " + result);
        return result;
    };

    //测试用例
    op("[welcome to china]"); //这样调用p等于'',打印出welcome to china
    op("[welcome t");   //这样调用p="[welcome t"
    op("o china][wel"); // 这样调用p="o china][wel"
    op("[1welcome][2china][welcome t"); //这样调用打印出1welcome,2china,p="[welcome t"
    </script>
</body>
</html>
 
  相关解决方案