📅  最后修改于: 2023-12-03 14:58:11.198000             🧑  作者: Mango
正则表达式是一种用于匹配文本模式的工具,JavaScript 提供了内置的正则表达式对象以供使用。在编写正则表达式时,经常需要使用到重复模式,本文将介绍 JavaScript 中的重复模式。
点表示匹配任意单个字符(除了换行符)。例如,正则表达式 /a.b/ 可以匹配 "acb"、"aeb"、"akb" 等。
const regex = /a.b/;
console.log(regex.test("acb")); // true
console.log(regex.test("aeb")); // true
console.log(regex.test("akb")); // true
console.log(regex.test("a\nb")); // false
星号表示匹配前面的字符 0 次或多次。例如,正则表达式 /a*b/ 可以匹配 "b"、"ab"、"aab"、"aaab" 等。
const regex = /a*b/;
console.log(regex.test("b")); // true
console.log(regex.test("ab")); // true
console.log(regex.test("aab")); // true
console.log(regex.test("aaab")); // true
console.log(regex.test("bb")); // false
加号表示匹配前面的字符 1 次或多次。例如,正则表达式 /a+b/ 可以匹配 "ab"、"aab"、"aaab" 等,不能匹配 "b"。
const regex = /a+b/;
console.log(regex.test("ab")); // true
console.log(regex.test("aab")); // true
console.log(regex.test("aaab")); // true
console.log(regex.test("b")); // false
问号表示匹配前面的字符 0 次或 1 次。例如,正则表达式 /ab?c/ 可以匹配 "ac"、"abc" 等,不能匹配 "abbc"。
const regex = /ab?c/;
console.log(regex.test("ac")); // true
console.log(regex.test("abc")); // true
console.log(regex.test("abbc")); // false
花括号表示匹配前面的字符指定次数。例如,正则表达式 /a{3}b/ 仅匹配 "aaab",不匹配 "ab"。
const regex = /a{3}b/;
console.log(regex.test("aaab")); // true
console.log(regex.test("ab")); // false
花括号也可以表示匹配前面的字符最少出现 m 次,最多出现 n 次。例如,正则表达式 /a{2,4}b/ 可以匹配 "aab"、"aaab"、"aaaab",不匹配 "ab" 和 "aaaaab"。
const regex = /a{2,4}b/;
console.log(regex.test("aab")); // true
console.log(regex.test("aaab")); // true
console.log(regex.test("aaaab")); // true
console.log(regex.test("ab")); // false
console.log(regex.test("aaaaab")); // false
正则表达式默认是贪婪模式,即尽可能匹配更多的字符。例如,正则表达式 /a.*b/ 在字符串 "a123b456b" 中匹配的结果是 "a123b456"。
const regex = /a.*b/;
console.log(regex.exec("a123b456b")[0]); // "a123b456"
如果希望正则表达式尽可能匹配更少的字符,可以使用非贪婪模式。在重复模式后面加上问号即可。例如,正则表达式 /a.*?b/ 在字符串 "a123b456b" 中匹配的结果是 "a123b"。
const regex = /a.*?b/;
console.log(regex.exec("a123b456b")[0]); // "a123b"
JavaScript 中的重复模式正则表达式包括点字符、星号、加号、问号和花括号。花括号不仅可以表示匹配固定次数的字符,还可以表示匹配某个范围内的次数。在默认情况下,正则表达式是贪婪模式,可以使用问号将之转变为非贪婪模式。正则表达式在字符串匹配和验证中非常有效,可以大大提高代码的效率和可维护性。