正则表达式之(*)

偶然之间,使用正则表达式出现了问题,查其原因,还是理解有偏差。 问题:
var str = ".abcd..efgh.ijkl.";
alert(str.replace(/(^\.*)|(\.*$)/g,"A"));
//结果显示:Aabcd..efgh.ijklAA
本来按照我的理解,最后的结果可能是:Aabcd..efgh.ijklA,但是最终出现的结果却是Aabcd..efgh.ijklAA,比我想的结果在最末尾多了一个A,这是怎么回事呢? 根据正则表达式规则,*号表示“匹配0或多次”。 还有点不太理解,于是,又做一例子:
var str = ".abcd..efgh.ijkl.";
var str2 = "abcd..efgh.ijkl.";
var str3 = "abcd..efgh.ijkl";
alert(str.replace(/(\.*)/g,"A"));
//结果显示:AAaAbAcAdAAeAfAgAhAAiAjAkAlAA
alert(str2.replace(/(\.*)/g,"A"));
//  结果显示:AaAbAcAdAAeAfAgAhAAiAjAkAlAA
alert(str3.replace(/(\.*)/g,"A"));
//  结果显示:AaAbAcAdAAeAfAgAhAAiAjAkAlA
结果一目了然,不管原字符位置是不是(.),置换之后,原字符串的每个字符前面(或后面)都添加了一个A,原字符串变换过程,我猜测可能是这样的:按照*号的规则,可以“匹配0次或多次”,在原字符串每两个字符直接都添加一个空位,在字符串两端也都添加一个(注意,假如字符串内有连续的1个以上的.号,将其看做为1个字符),用(.)号与空位匹配,均匹配成功0次,所以这些空位全部被置换成了A,而其他原字符串中的符合条件的(.)号位,正常置换。 不知道这样理解是否正确,有不同意见请留言一起讨论。
posted @ 2010-09-18 22:54  SillyCoder  阅读(938)  评论(0编辑  收藏  举报