- 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>
------解决方案--------------------
正则不是很会。。帮你顶下
------解决方案--------------------
------解决方案--------------------
- 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>