var re = /[a]+([^a]*?)[b]+/gi;
var s = "1234a桌子bbb456";
alert(re.test(s));
alert(s.match(re));
alert(RegExp.$1); // 桌子JScript语言参考
http://download.csdn.net/source/308916

解决方案 »

  1.   

    补充一句,/[a]+([^a]*?)[b]+/gi; 只管取出ab之间滴字符!要用RegExp.$1来取,不明白查查手册!
      

  2.   

    (?=a) 匹配了  a前面那个位子
    \S*   匹配了  a桌子
    (?=b) 匹配了  b前面的位子
      

  3.   

    有两个非捕获元字符用于称之为预查的匹配。
    1 正向预查 (?=pattern)
    在任何匹配 pattern 的字符串开始处匹配查找字符串。
    例如: 
    str = "Windows95 Windows98 WindowsNT Windows2000"; 
    newstr = str.replace(/Windows(?=95|98)/g,"win"); 
    document.write(newstr)
    匹配"Windows95 Windows98"中的"Windows"但不能匹配"WindowsNT Windows2000"中的"Windows"
    结果:win95 win98 WindowsNT Windows20002 负向预查 (?!pattern)
    在任何不匹配 pattern 的字符串开始处匹配查找字符串。
    例如: 
    str = "Windows95 Windows98 WindowsNT Windows2000"; 
    newstr = str.replace(/Windows(?!95|98)/g,"win"); 
    document.write(newstr)
    匹配"WindowsNT Windows2000"中的"Windows"但不能匹配"Windows95 Windows98"中的"Windows"
    结果:Windows95 Windows98 winNT win2000注意:预查所匹配的字符串不包括匹配pattern的字符串,即括号内的字符串,而且只能前瞻不能后瞻(待研究)字符 含义
    ____________________________________________________________________ 
    | 或者 
    (pattern) 分组,子模式
    (?:pattern) 分组,非捕获元字符
    (?=pattern) 正向预查,非捕获元字符
    (?!pattern) 负向预查,非捕获元字符
    \n 和第n个分组所匹配的字符相匹配
    ____________________________________________________________________ 
      

  4.   

    写个多个匹配滴。
    var s = "1234aaaa板凳ba桌子bbb123a椅子bbb456";var re = /[a]+([^a]*?)[b]+/gi;if (re.test(s))
    {
        var a = s.match(re);
        for (var i=0; i<a.length; i++)
        {
            a[i].match(re);
            alert(a[i] + "\n\n" + RegExp.$1);
        }    
    }