js 正则表达式

来源:undefined 2025-05-27 09:26:22 1001

JavaScript 正则表达式(RegExp)是一个强大的工具,用于模式匹配和文本处理。学习和掌握正则表达式能有效提高处理字符串的效率。正则表达式是用于匹配字符组合的模式,通常用于字符串搜索和替换等操作。在 JavaScript 中,正则表达式是由 RegExp 对象表示的。

基本语法

正则表达式可以通过两种方式创建:字面量和构造函数。

字面量语法

const regex = /pattern/flags;

构造函数语法

const regex = new RegExp(pattern, flags);

pattern 是要匹配的文本模式,flags 是可选的标志,用于控制搜索的行为。例如,i 标志用于不区分大小写匹配,g 标志用于全局匹配等。

常用元字符

正则表达式中有很多元字符,它们在模式中有特殊的含义。

. :匹配除换行符以外的任何单个字符。 ^ :匹配输入的开始位置。 $ :匹配输入的结束位置。 * :匹配前一个表达式 0 次或多次。 + :匹配前一个表达式 1 次或多次。 ? :匹配前一个表达式 0 次或 1 次。 :用于转义特殊字符。 [] :匹配括号内的任意字符。 | :表示“或”操作,比如 a|b 匹配 "a" 或 "b"。 () :用于分组,捕获匹配的子串。

常用预定义类

预定义类用于简化模式的编写:

d :匹配一个数字字符,相当于 [0-9]。 D :匹配一个非数字字符,相当于 [^0-9]。 w :匹配一个字母、数字或下划线字符,相当于 [a-zA-Z0-9_]。 W :匹配一个非字母、非数字、非下划线字符。 s :匹配一个空白字符,包括空格、制表符、换页符等。 S :匹配一个非空白字符。

常用正则表达式方法

JavaScript 提供了一些方法来操作正则表达式:

test() 方法: 返回一个布尔值,指示是否存在与模式匹配的字符串。

const regex = /hello/; console.log(regex.test(hello world)); // true

exec() 方法: 返回一个数组,其中包含匹配的内容。如果没有匹配,则返回 null。

const regex = /hello/; console.log(regex.exec(hello world)); // [hello]

字符串方法与正则表达式结合使用

match() 方法: 返回一个数组,包含所有匹配的结果。

const str = hello world; const matches = str.match(/o/g); console.log(matches); // [o, o]

replace() 方法: 执行查找和替换操作。

const str = hello world; const newStr = str.replace(/world/, JavaScript); console.log(newStr); // hello JavaScript

search() 方法: 返回字符串中匹配项的索引。找不到则返回 -1。

const str = hello world; console.log(str.search(/world/)); // 6

split() 方法: 使用正则表达式分割字符串。

const str = hello world, welcome; const parts = str.split(/,s*/); console.log(parts); // [hello world, welcome]

使用分组和引用

正则表达式的分组功能意味着你可以在模式中组合多个字符,并在匹配中以单个单元处理它们。分组通过小括号 () 实现。

捕获组: 捕获的组可以使用反斜杠 加数字的方式引用。比如 /(hi|hello)/ 可以匹配 "hi" 或 "hello"。

命名捕获组: JavaScript 支持命名捕获组,这使得引用变得更加直观。通过 ?<name> 语法,你可以为组命名。

const regex = /(?<greeting>hello|hi) (w+)/; const result = regex.exec(hello world); console.log(result.groups.greeting); // hello

回溯引用

使用反斜杠 加数字来引用捕获的组,称为回溯引用。

const regex = /(w+)s/; const str = hello hello; console.log(regex.test(str)); // true

在这个例子中, 指的是*个捕获组,即之前匹配的 w+。

零宽断言

零宽断言用于指定匹配的前后环境,包括正向断言、负向断言等。

正向断言 (?=...):在匹配时需要后面的表达式。

const regex = /d+(?= dollars)/; const str = 100 dollars; console.log(str.match(regex)); // [100]

负向断言 (?!...):在匹配时不需要后面的表达式。

const regex = /d+(?! dollars)/; const str = 100 euros; console.log(str.match(regex)); // [100]

非捕获组

有时候,你只想分组而不捕获匹配,因而可以使用非捕获组 (?:...)。

const regex = /(?:hi|hello) w+/; const str = hello world; console.log(regex.test(str)); // true

贪婪与懒惰匹配

贪婪匹配:默认情况下,正则表达式是贪婪的,它总是尝试匹配尽可能长的字符串。

const str = a123b; const regex = /a.*b/; console.log(str.match(regex)); // [a123b]

懒惰匹配:在量词后加 ? 可以使其变为懒惰匹配,即匹配尽可能短的字符串。

const str = a123b; const regex = /a.*?b/; console.log(str.match(regex)); // [a123b]

结束语

掌握正则表达式需要一定的练习和应用,因为其自身的复杂性,但一旦掌握,它将成为处理字符串和进行文本分析的强大工具。在 JavaScript 中,合理使用正则表达式可以简化代码,提高应用程序的效率和可读性。此外,虽然正则表达式很强大,但也要注意其性能问题,在复杂情况下可能会导致性能下降。因此,应小心构建正则表达式并分析其实际应用效果。

上一篇:js sort 排序 下一篇:http200

最新文章