\s*为什么匹配不到abc (abc后有空格)后面的空格???

解决方案 »

  1.   

    我要匹配后面的空格,你的写法用\s.*当然什么都会匹配到(也包括了后面的其他字符),我只想明白为什么\s*不能匹配多个空格(如"abc     def"中的这些很多的空格)
      

  2.   

    可以匹配的呀……
    LZ需匹配的字符串能否贴出来看看? var str = "12  34  ";
    var reg = /\s*/g
    alert(str.match(reg).length);
    alert(str.match(reg));
      

  3.   

    我的理解是这样。在正则对象在进行匹配操作时会
    首先从字符串的开始出既“^”处开始检查是否符合
    匹配,若符合匹配且不需要查找全部匹配则匹配过程结束。
    很显然在字符串的开始处这个匹配就已经完成了,因为
    \s*可以匹配0个空格,而你有没有指定需要匹配全部
    所以这个过程就终止了。
    //查找所有的\s*匹配需要添加g
    var reg=/\s*/g;
    var str="abc   ";
    alert("["+str.match(reg)+"]");//这个可能是符合你的预期的
    var reg=/\s*$/;
    var str="abc   ";
    alert("["+str.match(reg)+"]");
      

  4.   

    谈一下我对正则实现的一点猜想。在我的理解中正则是一个匹配过程,它需要又以下几个步骤完成:
    1. 对正则进行解析,把正则符号翻译为执行命令。比如楼主的正则\s*,可以翻译为两条命令:
       \s    matchChar(getCurChar(),'\s');
       *     if(getPreMatchResult()==true) doPreMatch();
       这是把这两条命令放入命令队列2. 解析器执行命令队列中的命令。在执行过程中随着读取的进行会移动匹配指针也就是正则对象的lastIndex。
    当执行完毕命令队列中的命令之后则意味着完成了一次匹配,这个时候匹配
    指针可能还没有到字符的末尾,这是如果指定了g属性则继续执行命令队列
    中的命令。如果用过Java的正则的话一定知道Java中的Pattern对象是不能new的而只能
    使用Pattern.complile方法就是这个原因,因为正则表达式需要编译之后才
    能运行
      

  5.   


    //这个可能是符合你的预期的
    var reg=/\s*$/;
    var str="abc   ";
    alert("["+str.match(reg)+"]");得加标志m
    var reg=/\s*$/m;
      

  6.   

    9楼的我所要的不是那个结果,如果只为取得那个结果,我也会,我是想说为什么\s*不匹配“abc      def”中的空格
      

  7.   


    是可以的. 不知道楼主用的是什么样子的测试文本, 整个正则又如何写.
    程序代码又是如何写
    var a = "abc";
    var b = "   ";var ary = (a + b).match(/\s*/g);
    alert( ary[3] === b ); // true
      

  8.   

    我后面有加g的,所以abc def中的空格也应该被匹配,还有其实abc def之间也是有许多空格的
      

  9.   

    我用的是RegExr测试,我猜它是Java环境,因为它支持固定数目的逆序环视,还有我alert(ary[0])弹出的是空的,我原以为它会弹出a,这可以解释一下吗
      

  10.   


    var ary = "abc   ".match(/\s*/g);
    alert( ary[3] === "   " );          // true
    正则 \s* 在 "abc   " 中一共有四个匹配[1] 开始至 "a" 之间的零长度字符串
    [2] "a" 至 "b" 之间的零长度字符串
    [3] "b" 至 "c" 之间的零长度字符串
    [4] "c" 至 结尾 的三个空格 "   "所以 ary[0], ary[1], ary[2] 是空串ary[3] === "   "