读书人

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

发布时间: 2012-05-24 11:55:41 作者: rapoo

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

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 chinaalert("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> 


[解决办法]
替换掉"["和"]"再输出就可以了

读书人网 >JavaScript

热点推荐