<html>
 <head></head>
 <body><script type="text/javascript">
    var strid = strpwd = '' ;
    var str = "ID号:11111111111111111 密码:000000000000000002 时间:2014-1-1"+
              "ID号:11111111111111113 密码:000000000000000003 时间:2014-1-1"+
              "ID号:11111111111111114 密码:000000000000000004 时间:2014-1-1"+
              "ID号:YD111111111111110 密码:000000000000000005 时间:2014-1-1";    var regexp = new RegExp("(?:ID号\:)([A-Za-z0-9]{17})",'g');
    while((result = regexp.exec(str)) != null){ 
            strid += result[1]+"," ;
    } 
    alert(strid);
    
    //密码获取同上 var regexp = new RegExp("(?:密码\:)([A-Za-z0-9]{17})",'g');
</script>
 </body>
</html> 

解决方案 »

  1.   

    var stru = "ID号:11111111111111111 密码:000000000000000002 时间:2014-1-1ID号:11111111111111113 密码:000000000000000003 时间:2014-1-1ID号:11111111111111114 密码:000000000000000004 时间:2014-1-1ID号:YD111111111111110 密码:000000000000000005 时间:2014-1-1";var reg1 = /[^\da-zA-Z]([\da-zA-Z]{17})[^\da-zA-Z]/g,
    reg2 = /[^\d](\d{18})[^\d]/g,
    strid= stru.match(reg1).join(",").replace(reg1,"$1"),
    strpwd= stru.match(reg2).join(",").replace(reg2,"$1");
    //之所以要用replace处理一下,是因为前面匹配出来的数据,前后都会有一个额外的数据
    console.log(strid);
    console.log(strpwd);按照字符串来处理的stru
      

  2.   


    现在有个新的问题:
    格式1:
    ID号:11111111111111111 密码:000000000000000002 时间:2014-1-1
    ID号:11111111111111113 密码:000000000000000003 时间:2014-1-1
    格式2:
    ID号:11111111111111111 密码:000000000000000002
    ID号:11111111111111113 密码:000000000000000003
    格式3:
    ID号:11111111111111111 000000000000000002
    ID号:11111111111111113 000000000000000003
    格式4:
    11111111111111111 密码:000000000000000002
    11111111111111113 密码:000000000000000003
    格式5:
    11111111111111111 000000000000000002
    11111111111111113 000000000000000003等等多样化格式 但是ID号的位数 和密码 肯定是固定的 这种情况的话正则表达式能否解决呢?
      

  3.   

    可以啊,这样只是说添加一个匹配开头或者结尾的就可以了。但是你这里两行直接的字符串,必须要有间隔的,不管是空格或者是换行什么的。
    像你第4,5中的测试用例,这里写成的是换行,如果我当成字符串的话,换行的地方,不能连在一起的。var stru = "11111111111111111 000000000000000002 11111111111111113 000000000000000003";var reg1 = /(?:[^\da-zA-Z]|^)([\da-zA-Z]{17})(?:[^\da-zA-Z]|$)/g,
    reg2 = /(?:[^\d]|^)(\d{18})(?:[^\d]|$)/g,
    strid= stru.match(reg1).join(",").replace(reg1,"$1"),
    strpwd= stru.match(reg2).join(",").replace(reg2,"$1");
    //之所以要用replace处理一下,是因为前面匹配出来的数据,前后都会有一个额外的数据
    console.log(strid);
    console.log(strpwd);
    比如,我使用的最后一个的例子,当中是加了一个空格的。
    stru = "11111111111111111 00000000000000000211111111111111113 000000000000000003";
    如果不使用空格的话,是不对的。所以你自己注意下吧,
    重写后的正则在第一段代码中,试试看...
      

  4.   

    你说的这种可能性,只出现在页面中,如果是传过来的数据,肯定不会是这样的吧。上面的正则依然可以处理啊,比如你看下面这个结构:
    <p id = "a">
    11111111111111111<br />
    000000000000000002<br />
    11111111111111113<br />
    000000000000000003
    </p>
    这里不管是不是加上<br />进行换行。
    上面的正则都能处理的。var stru = document.getElementById("a").innerHTML;
    这样获取值。应该没有问题吧?我测试时可以的。不管怎么说呢,这个正则只要前后有非数字,都能正常匹配,如果是数字就不行了。当然,按你的意思,结构是这样的,那肯定会有非数字作为分隔的。所以后面的正则都可以处理的,至少我想不到哪种情况,是不能处理的。
      

  5.   


    数据是在textarea控件中获取的 数据之间会有/n换行,但没有任何字符和空格这种情况
      

  6.   

    。你是不是没有测试就把这个问题提出来了。使用textarea也是没有问题的啊,换行符也是符号的。我在IE和Chrome都测试了下,使用5#的正则,可以获取到正确的答案啊。。
    你测试有问题?