JavaScript正则表达式常用方法

172 阅读3分钟

正则表达式是一种强大的工具,用于在文本中查找和匹配特定的模式。在JavaScript中,正则表达式通常被用于验证输入,搜索和替换文本等操作。

匹配字符

使用方括号[]可以匹配一组字符中的任何一个字符。例如,[abc]可以匹配字符abc

.可以匹配任何字符,除了换行符。

\\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)可以匹配字符ab

(?:)表示非捕获组,即匹配但不捕获该组。

示例

如果要匹配一个字符串中是否包含至少一个数字或字母,可以使用正则表达式/(\\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"]