本帖最后由 zzxxzzooo 于 2009-11-27 15:16:12 编辑

解决方案 »

  1.   

    .表示任何字符, +表示至少一个字符, ?表示尽量少的, 也就是从"<"到下一个">"为止123.001是被匹配的整个字符串, 123.00是你获取的第一个匹配, 也就是 至少一个数字+一个点+两个数字
      

  2.   

    还有这里的m表示进行多行匹配的意思,我记得除了^或$之外,使用m没有任何意义.附加参数m,表明可以进行多行匹配,但是这个只有当使用^和$模式时才会起作用,在其他的模式中,加不加入m都可以进行多行匹配(其实说多行的字符串也是一个普通字符串)
      

  3.   

    var number="123.001"; 
    alert(number.match(/^(\d+\.\d{2})\d*$/)); 
      
    为什么这个会返回{123.001,123.00} 
    ??????
      

  4.   

    .+ 便是1或者n个除换行符之外的所有字符,后面加了?表明这是一个非贪婪(惰性)匹配。加入html代码是这样的<p style="">段落内容</p>/<.+>/gim 匹配的是<p style="">段落内容</p>
    而/<.+?>/gim 会有两个匹配,分别是<p style="">和</p>
      

  5.   

    关于String的match方法请参考http://w3school.com.cn/js/jsref_match.asp
      

  6.   

    var number="123.001"; 
    alert(number.match(/^(\d+\.\d{2})\d*$/)); 
      
    为什么这个会返回{123.001,123.00} 
    ??????规则后面没加g啊,不是全局的怎么返回两个???
      

  7.   

    如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。 index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。
      

  8.   

    楼主所给的非贪婪模式写法通常是不可取的,还有i和m模式用在这里也没意义
    var reg = /<[^>]*>/g;参考
    正则基础之——贪婪与非贪婪模式 match返回的是一个集合,包含所有捕获组匹配到的内容
    其中123.00是由捕获组(\d+\.\d{2})匹配到的内容
    用非捕获组代替捕获组看一下
    var number="123.001";
    alert(number.match(/^(?:\d+\.\d{2})\d*$/));