m是multiline 
如果写了/m ,那么模式匹配将以多行的模式进行.在这
种模式下,锚字符 ^ 和 $ 匹配的不只是检索字符串的开头和结尾,还匹配检索字符串内部的一行的开头和结尾

解决方案 »

  1.   

    我更是sb,我要问:
    比如一个串:"aaaaaaaaa\n\rxxxxxxx","锚字符 ^ 和 $ 匹配的不只是检索字符串的开头和结尾还匹配检索字符串内部的一行的开头和结尾"
    那么如果带了m标记,锚字符 ^ 匹配第一个a,还匹配第一个“x”?$匹配最后一个a,还匹配最后一个x?
      

  2.   

    对于:"aaaaaaaaa\n\rxxxxxxx“,/^(.|\n){1,30}$/gm,应该是匹配整个串吧?而不是去匹被\n分割开的每行吧?
    请大家给点信心
      

  3.   

    给你举个例子吧
    <script language=javascript>
      var a="aaaaaaaaa\n\rxxxxxxx";
      re=/^(a|x){1,30}$/gm
      var b=a.match(re)
      alert(b[0]);
      alert(b[1]);
    </script>
    这个上面b[0]的值是aaaaaaaaa b[1]的值是xxxxxxx
    匹配到了两个,而^是匹配字符串的开头,$是匹配字符串的结尾,就是必须以a或x开头并且结尾才能匹配到,如果匹配的是整个字符串的话只能匹配到一个,因为并没有超过30个字符限制。而现在匹配到两个就是对每一行都进行了匹配。
    我觉得其实做程序员已经非常自豪的,楼主多想想这个就会有信心的。
      

  4.   

    你的那个/^(.|\n){1,30}$/gm
    是由于你要匹配的字符串里面有\n
    \n也符合你的正则的要求,就继续向下匹配。
    所以把一行内的\n也算到里面了,变成只能匹配一个的正则
      

  5.   

    我的一个测试例子:
    var x=/.{1,3}/g;
    var str="aaaa\n\rxxxx";//使用\n,和使用\r的效果是不一样的
    var r=str.match(x);
    alert(r);
    我原来对m 这个flag理解是:如果有m,则pattern回去匹配多行,如果没有,则只会匹配第一行。但是这个例子里没有m,只有g,它也匹配了多行,所以有点糊涂了。像这个例子里,只要有g就行了
      

  6.   

    介绍几个正则表达式的网址你看一看吧,应该能对你有些帮助!
    http://soulogic.com/doc/RegularExpressions
    http://webuc.net/ddf3/archive/2005/03/18/2945.aspx
    http://www.zahui.com/html/7/
    http://51js.zahui.net/html/1/
      

  7.   

    你所说的这个问题
    =/.{1,3}/g
    这个匹配全局
    而把\n\r都当成字符匹配了,m的作用好象只有在^$才有用
      

  8.   

    不过我想,飞雪给俺的几个地址并无出奇之处,对那些内容我也是比较熟悉的了。就是没看到m这个flag发生功效的例子