var st="<param1>aaa,<param222>aasdf34rwr<p45>ddeefe";
var reg = /<([^>]+)>/g
var rs = st.match(reg);
for (var i=0;i<rs.length;i++)
rs[i]=rs[i].replace(reg,"$1")
alert(rs)方法有点笨呵呵。

解决方案 »

  1.   

    <script>
    s = "<param1>aaa,<param222>aasdf34rwr<p45>ddeefe";  // 原串
    re = /<([^<]*)>/g;  // 正则表达式,匹配被<>括起的部分,匹配范围为全程while(p = re.exec(s)[1]) {  // 循环,每次只匹配一个
      document.write(p+"<br>"); // 输出匹配结果
    }
    </script>
      

  2.   

    var s="<param1>aaa,<param222>aasdf34rwr<p45>ddeefe";
    var Arr=[];
    s=s.replace(/<([^<]*)>/g,function($0,$1){Arr[Arr.length]=$1})//这个时候 Arr[0]="param1"  Arr[1]="param222"  Arr[2]="p45" 
      

  3.   

    能不能不通过每次只匹配一个 的方式直接就把所有的都放到一个集合中呢?因为我是在  vc 中用 
    感觉这个 s = "<param1>aaa,<param222>aasdf34rwr<p45>ddeefe";  
    始终没有变所以会是死循环如果不行的话,我只有用个中间变量了
    :(
      

  4.   

    regExpPtr->CreateDispatch("VBScript.RegExp");
      

  5.   

    用最笨的办法解决了,结帖
    CString ReplaceValue(CRstValues &rsv, CString sourecStr)
    {
    IRegExpPtr regExpPtr(__uuidof(RegExp));
    regExpPtr->PutGlobal(VARIANT_TRUE);
    regExpPtr->PutPattern("<([^<]+)>");

    CString tempStr = sourecStr;
    CString fieldName,fieldValue; IMatchCollectionPtr matches = regExpPtr->Execute((LPCTSTR)tempStr);
    IMatchPtr match = matches->GetItem((long)0);
    while(match){
    fieldName = (BSTR)match->GetValue();
    tempStr.Replace(fieldName,"");

    fieldName.Replace("<","");
    fieldName.Replace(">","");
    rsv.GetValueStr(fieldValue,fieldName);
    sourecStr.Replace("<"+fieldName+">",fieldValue); matches = regExpPtr->Execute((LPCTSTR)tempStr);
    if(matches->GetCount()<1) break;
    match = matches->GetItem((long)0);

    } return sourecStr;
    }