量词

column1 column2
n+ 匹配任何包含至少一个 n 的字符串。
例如,/a+/ 匹配 “candy” 中的 “a”,“caaaaaaandy” 中所有的 “a”。
n* 匹配任何包含零个或多个 n 的字符串。
例如,/bo*/ 匹配 “A ghost booooed” 中的 “boooo”,“A bird warbled” 中的 “b”,但是不匹配 “A goat grunted”。
n? 匹配任何包含零个或一个 n 的字符串。
例如,/e?le?/ 匹配 “angel” 中的 “el”,“angle” 中的 “le”。
n 匹配包含 X 个 n 的序列的字符串。
例如,/a{2}/ 不匹配 “candy,” 中的 “a”,但是匹配 “caandy,” 中的两个 “a”,且匹配 “caaandy.” 中的前两个 “a”。
n X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。
例如,/a{2,}/ 不匹配 “candy” 中的 “a”,但是匹配 “caandy” 和 “caaaaaaandy.” 中所有的 “a”。
n X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。
例如,/a{1,3}/ 不匹配 “cndy”,匹配 “candy,” 中的 “a”,“caandy,” 中的两个 “a”,匹配 “caaaaaaandy” 中的前面三个 “a”。注意,当匹配 “caaaaaaandy” 时,即使原始字符串拥有更多的 “a”,匹配项也是 “aaa”。
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。
?=n 匹配任何其后紧接指定字符串 n 的字符串。
?!n 匹配任何其后没有紧接指定字符串 n 的字符串。

1、贪婪模式

‘+ * ?’ 三个量词符,默认情况下都是最大可能匹配,即匹配直到下一个字符不满足匹配规则为止。这被称为贪婪模式。

var s = 'aaa'; s.match(/a+/);
console.log(s);

控制台:

202104191618795011180420

上面代码中,模式是/a+/,表示匹配1个a或多个a,那么到底会匹配几个a呢?
因为默认是贪婪模式,会一直匹配到字符a不出现为止,所以匹配结果是3个a。
如果想将贪婪模式改为非贪婪模式,可以在量词符后面加一个问号。

var s1 = 'aaa';
var b = s1.match(/a+?/); 
console.log(b);

控制台:

202104191618795060135259

上面代码中,模式结尾添加了一个问号/a+?/,这时就改为非贪婪模式,一旦条件满足,就不再往下匹配。

2、^n 匹配任何开头为 n 的字符串。

var str = '123abc154abc';
var reg = /^123/;
var res = reg.test(str);
console.log(res);

控制台:

202104191618795314637861

要求字符串开头必须是数字

var reg1 = /^\d/; 
var res1 = reg1.test(str);
console.log(res1);

控制台:

202104191618795314637861-1652262639929

3、n$ 匹配任何结尾为 n 的字符串。

var reg = /abc$/; 
var res = reg.test(str)
; console.log(res);

控制台:

202104191618795314637861-1652262654310

4、/^***$/要求字符串必须完全匹配

var str = 'abcbabc'; 
var reg = /^abcbabc$/; 
var res = reg.test(str);
console.log(res);

控制台:

202104191618795314637861-1652262667024