正则表达式是一种强大的工具,用于在文本中查找和匹配特定的模式。在JavaScript中,正则表达式通常被用于验证输入,搜索和替换文本等操作。
匹配字符
使用方括号[]可以匹配一组字符中的任何一个字符。例如,[abc]可以匹配字符a,b或c。
.可以匹配任何字符,除了换行符。
\\w可以匹配任何单词字符(字母、数字、下划线),等价于[A-Za-z0-9_]。
\\s可以匹配任何空白字符(空格、制表符、换行符等)。
\\d可以匹配任何数字,等价于[0-9]。
示例
如果要匹配一个字符串中是否包含数字和字母,可以使用正则表达式/[a-zA-Z0-9]/。
const pattern = /[a-zA-Z0-9]/;
const str = "Hello World 123";
console.log(pattern.test(str)); // true
量词
+表示前面的字符必须出现至少一次。
- ``表示前面的字符可以出现任意次,包括0次。
?表示前面的字符可以出现0次或1次。
{n}表示前面的字符必须出现n次。
{n,}表示前面的字符必须出现至少n次。
{n,m}表示前面的字符必须出现n到m次。
示例
如果要匹配一个字符串中是否包含至少一个数字,可以使用正则表达式/\\d+/。
const pattern = /\\d+/;
const str = "Hello World 123";
console.log(pattern.test(str)); // true
边界限制
^表示匹配字符串的开始。
$表示匹配字符串的结尾。
\\b可以匹配单词边界,例如空格、逗号、句号等。
示例
如果要匹配一个字符串是否以数字开头和结尾,可以使用正则表达式/^\\d.*\\d$/。
const pattern = /^\\d.*\\d$/;
const str = "123 Hello World 456";
console.log(pattern.test(str)); // true
分组
使用小括号()可以将一组字符看作一个整体。
|表示或者,例如(a|b)可以匹配字符a或b。
(?:)表示非捕获组,即匹配但不捕获该组。
示例
如果要匹配一个字符串中是否包含至少一个数字或字母,可以使用正则表达式/(\\d|a-z)+/i。
const pattern = /(\\d|a-z)+/i;
const str = "Hello World 123";
console.log(pattern.test(str)); // true
替换
使用replace()函数可以替换匹配的文本。
例如:str.replace(/abc/, 'def')可以将字符串str中的第一个abc替换为def。
const pattern = /world/i;
const str = "Hello World";
console.log(str.replace(pattern, "JavaScript")); // "Hello JavaScript"
向前查找和向后查找
向前查找和向后查找可以用于匹配某个字符前面或后面的字符。
(?=pattern)是向前查找,匹配一个位置,该位置后面紧跟着pattern。(?!pattern)是负向前查找,匹配一个位置,该位置后面不紧跟着pattern。(?<=pattern)是向后查找,匹配一个位置,该位置前面紧跟着pattern。(?<!pattern)是负向后查找,匹配一个位置,该位置前面不紧跟着pattern。
示例
如果要匹配一个字符串中是否包含数字和字母,且数字在字母前面,可以使用正则表达式/(?=\\\\d+[a-zA-Z])/。
const pattern = /(?=\\\\d+[a-zA-Z])/;
const str = "123Hello World";
console.log(pattern.test(str)); // true
反向引用
反向引用是指在正则表达式中引用前面匹配成功的子表达式。
使用()捕获一个子表达式,并使用\\n引用该子表达式,其中n为子表达式的编号,从1开始。
示例
如果要匹配一个字符串中是否包含连续的两个相同字符,可以使用正则表达式/(.)\\\\1/。其中,\\\\1是对第一个子表达式(.)的引用。
const pattern = /(.)\\\\1/;
const str1 = "abb";
const str2 = "abc";
console.log(pattern.test(str1)); // true
console.log(pattern.test(str2)); // false
非贪婪匹配
默认情况下,正则表达式的量词都是贪婪的,即尽可能匹配更多的字符。
使用?可以将量词改为非贪婪的,即尽可能匹配更少的字符。
示例
如果要匹配一个字符串中包含的最短的一组数字,可以使用正则表达式/\\\\d+?/。
const pattern = /\\\\d+?/;
const str = "123 Hello World 456";
console.log(str.match(pattern)); // ["1"]