function trim(s){
var re=/^\s*(.*?)\s*$/;
//return re.exec(s)[1];
return s.replace(re,'$1');
}
alert("|"+trim(" asbc cxv ")+"|");
在这段代码中为何(.*?)匹配的不是a而是asbc cxv 。
var re=/^\s*(.*?)\s*$/;
//return re.exec(s)[1];
return s.replace(re,'$1');
}
alert("|"+trim(" asbc cxv ")+"|");
在这段代码中为何(.*?)匹配的不是a而是asbc cxv 。
*表示匹配. 0-N次
直到遇到\s空格为止如果不加问号
遇到\s也会一直匹配 直到遇到最后一个\s 空格为止
此时$1是 asbc cxv
可以这样:
/\s*(\S+?)\s*/
.貌似是表示任意字符,后面加*应该是直接匹配到结尾而不是遇到\s就结束吧,否则$1得到的将是asbc
" asbc cxv "如果说匹配a的话 那么接下来 \s*肯定能匹配 但是$怎么办呢 不能匹配对吧 。所以回溯继续匹配as
接下来asbc cxv全匹配完 发现$可以匹配的时候 才停止匹配
先看看这个吧。以防理解屈了。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
2 var a = str.match(regexp);
3 alert(a.length); //output:3
4 alert(a[0]); //output:abbb
5 alert(a[1]); //output:aabbb
6 alert(a[2]); //output:aaabbb
惰性量词的工作过程可以这样表示:
a)a
b)ab
c)abb
d)abbb //保存结果,并从下一个位置重新开始
e)a
f)aa
g)aab
h)aabb
j)aabbb //保存结果,并从下一个位置重新开始
e)a
e)aa
e)aaa
e)aaab
e)aaabb
e)aaabbb //保存结果,并从下一个位置重新开始