+匹配一个或多个字符,例如:
// 邮件地址检测
/[\w\.]+@\w+\.\w+/.test("asd.qwe@qq.com");//true
注意:
*匹配零个或者多个字符。
/[\w\.]*@\w+\.\w+/.test("@qq.com");//true
?匹配零个或者一个字符。
// 匹配http(s)请求地址
/https?:\/\/[\w.]+/.test("http://baidu.com"); // true
/https?:\/\/[\w.]+/.test("https://baidu.com"); // true
大括号({})用来设定重复的次数。
在不知道匹配次数的上限的情况下,容易出现过度匹配的问题:
// 想匹配b标签中的内容
"head <B>this is in a B tag</B> mid <B>this is in another B tag</B> end."
.match(/<[Bb]>.*<\/[Bb]>/g);
// 匹配结果是<B>this is in a B tag</B> mid <B>this is in another B tag</B>
在上面例子中,第一个<B>和最后一个</B>中间的内容被/.*/全部匹配出来了。这就是“贪婪型”的元字符。 要想分别匹配两个B标签中中间的内容,需要使用“懒惰型”版本:*?
"head <B>this is in a B tag</B> mid <B>this is in another B tag</B> end."
.match(/<[Bb]>.*?<\/[Bb]>/g);
// 匹配结果是["<B>this is in a B tag</B>", "<B>this is in another B tag</B>"]
贪婪型元字符 | 懒惰型元字符 |
---|---|
* | *? |
+ | +? |
{n,} | {n,}? |