可以匹配的呀…… LZ需匹配的字符串能否贴出来看看? var str = "12 34 "; var reg = /\s*/g alert(str.match(reg).length); alert(str.match(reg));
我的理解是这样。在正则对象在进行匹配操作时会 首先从字符串的开始出既“^”处开始检查是否符合 匹配,若符合匹配且不需要查找全部匹配则匹配过程结束。 很显然在字符串的开始处这个匹配就已经完成了,因为 \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)+"]");
LZ需匹配的字符串能否贴出来看看? var str = "12 34 ";
var reg = /\s*/g
alert(str.match(reg).length);
alert(str.match(reg));
首先从字符串的开始出既“^”处开始检查是否符合
匹配,若符合匹配且不需要查找全部匹配则匹配过程结束。
很显然在字符串的开始处这个匹配就已经完成了,因为
\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)+"]");
1. 对正则进行解析,把正则符号翻译为执行命令。比如楼主的正则\s*,可以翻译为两条命令:
\s matchChar(getCurChar(),'\s');
* if(getPreMatchResult()==true) doPreMatch();
这是把这两条命令放入命令队列2. 解析器执行命令队列中的命令。在执行过程中随着读取的进行会移动匹配指针也就是正则对象的lastIndex。
当执行完毕命令队列中的命令之后则意味着完成了一次匹配,这个时候匹配
指针可能还没有到字符的末尾,这是如果指定了g属性则继续执行命令队列
中的命令。如果用过Java的正则的话一定知道Java中的Pattern对象是不能new的而只能
使用Pattern.complile方法就是这个原因,因为正则表达式需要编译之后才
能运行
//这个可能是符合你的预期的
var reg=/\s*$/;
var str="abc ";
alert("["+str.match(reg)+"]");得加标志m
var reg=/\s*$/m;
是可以的. 不知道楼主用的是什么样子的测试文本, 整个正则又如何写.
程序代码又是如何写
var a = "abc";
var b = " ";var ary = (a + b).match(/\s*/g);
alert( ary[3] === b ); // true
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] === " "