javascript正则表达式怎么用_如何匹配文本

JavaScript正则表达式用于匹配、查找、替换文本模式,支持字面量(/abc/)和构造函数(new RegExp())两种创建方式,常用标志有g、i、m;核心方法包括test(返回布尔)、match(返回数组)、exec(返回详细匹配对象);元字符如\d、\w、\s及量词+*?、捕获组()、转义(.)等需熟练掌握;replace支持字符串或函数替换,split可用正则分割;注意字符串中反斜杠需双写\\。

JavaScript 正则表达式(RegExp)是用来匹配、查找、替换文本中特定模式的工具。核心在于写对模式(pattern),再用字符串方法或 RegExp 对象调用它。

基础写法:字面量 vs 构造函数

两种创建正则的方式,常用字面量更简洁:

  • /abc/ —— 匹配连续的 "a"、"b"、"c"
  • new RegExp("abc") —— 动态拼接时用,比如变量参与模式:new RegExp(patternStr, "g")

末尾可加标志(flags),常见有:g(全局)、i(忽略大小写)、m(多行模式)。例如 /hello/gi 会找所有 "hello",不区分大小写。

常用匹配方法:test、match、exec

test() 最轻量,只返回 truefalse

const re = /cat/;
re.test("The cat sat"); // true

match() 在字符串上调用,返回匹配结果数组(无 g 时只返第一个+捕获组;有 g 时只返匹配项):

"I have 2 cats and 3 dogs".match(/\d+/g); // ["2", "3"]

exec() 是 RegExp 对象的方法,每次调用返回一个结果(含索引、捕获组等),配合 g 可循环遍历:

const re = /(\w+)\s+(\d+)/g;
let match;
while ((match = re.exec("apple 12 banana 34")) !== null) {
  console.log(match[0]); // "apple 12", "banana 34"
  console.log(match[1]); // "apple", "banana"
}

实用元字符和模式技巧

不必死记所有符号,先掌握高频组合:

  • \d 匹配数字,\w 匹配字母/数字/下划线,\s 匹配空白
  • + 表示“一个或多个”,* 是“零个或多个”,? 是“零个或一个”
  • [a-z] 匹配小写字母,[^0-9] 匹配非数字(^ 在中括号内表否定)
  • () 括起来的部分是“捕获组”,后续可通过 match[1]match[2] 取出
  • 想匹配真实点号 .?要转义:\.;同理,\$\+ 等特殊字符都需加反斜杠

替换与分割:replace 和 split

replace() 支持用字符串或函数做替换:

"price: $19.99".replace(/\$(\d+\.\d+)/, "¥$1"); // "price: ¥19.99"

其中 $1 引用第一个捕获组;若用函数,参数包含匹配项、分组、位置等,灵活性更高。

split() 也能用正则切分字符串,比固定分隔符更强大:

"a1b22c333".split(/\d+/); // ["a", "b", "c", ""]

不复杂但容易忽略细节:正则中的反斜杠在字符串里要写两道 \\(比如 "\\d+"),而字面量里只写一道 /\d+/。写错就匹配不到,调试时可先用 console.log(re.toString()) 看实际模式。