📜  JavaScript正则表达式(1)

📅  最后修改于: 2023-12-03 14:42:41.753000             🧑  作者: Mango

JavaScript正则表达式

正则表达式是一种强大的模式匹配工具,JavaScript对它进行了完整的支持,使用正则表达式可以实现字符串的快速搜索和替换等功能,这对于程序员来说是非常实用的。

基本语法

正则表达式是由字符和操作符等构成的特殊文本字符串,它描述了文本字符串的匹配模式。在JavaScript中,正则表达式可以使用RegExp对象来定义,也可以使用字面量来定义。例如:

// 使用RegExp对象进行定义
let regExp = new RegExp('pattern');

// 使用字面量进行定义
let regExp = /pattern/;

其中,pattern表示正则表达式的匹配模式,可以是单个字符、字符集合、重复以及分组等操作符的组合。

匹配模式
单个字符匹配

单个字符匹配表示在文本中搜索一个单独的字符。常用的单个字符匹配操作符有:

  • .:匹配除了换行符以外的任意单个字符。
  • \w:匹配任意一个英文字母或数字字符。
  • \W:匹配任意一个非英文字母或非数字字符。
  • \d:匹配任意一个数字字符。
  • \D:匹配任意一个非数字字符。
  • \s:匹配任意一个空白字符(包括空格、制表符、换行符等)。
  • \S:匹配任意一个非空白字符。

例如:

let regExp = /\w/; // 匹配任意一个英文字母或数字字符
regExp.test('hello') // true
regExp.test('hi!') // true

let regExp = /\d/; // 匹配任意一个数字字符
regExp.test('1234') // true
regExp.test('1a2b') // true

let regExp = /\s/; // 匹配任意一个空白字符
regExp.test('hello world') // true
regExp.test('hi\tthere') // true
字符集合匹配

字符集合匹配表示在文本中搜索一组字符中的任意单个字符。字符集合可以使用方括号进行定义,例如:

let regExp = /[abc]/; // 匹配a、b、c中的任意一个字符
regExp.test('hello') // true
regExp.test('world') // false

在字符集合中,可以使用-符号表示范围,例如:

let regExp = /[a-z]/; // 匹配所有小写字母
regExp.test('hello') // true
regExp.test('World') // false

同时,字符集合也可以取反,使用^符号表示,例如:

let regExp = /[^aeiou]/; // 匹配所有非元音字母
regExp.test('hello') // false
regExp.test('world') // true
重复匹配

重复匹配表示在文本中搜索一段特定的模式,并进行重复匹配。常用的重复匹配操作符有:

  • *:匹配重复零次或多次。
  • +:匹配重复一次或多次。
  • ?:匹配重复零次或一次。
  • {n}:匹配重复n次。
  • {n,}:匹配重复n次或更多次。
  • {n,m}:匹配重复n到m次。

例如:

let regExp = /\d+/; // 匹配任意一个数字字符重复一次或多次
regExp.test('1234') // true
regExp.test('a1b2c3d') // true

let regExp = /\d?/; // 匹配任意一个数字字符重复零次或一次
regExp.test('1234') // true
regExp.test('a1b') // true

let regExp = /\d{3}/; // 匹配任意一个数字字符重复三次
regExp.test('12345') // true
regExp.test('12') // false

let regExp = /\d{2,}/; // 匹配任意一个数字字符重复两次或更多次
regExp.test('1234') // true
regExp.test('1') // false

let regExp = /\d{1,3}/; // 匹配任意一个数字字符重复一次到三次
regExp.test('12345') // true
regExp.test('1') // true
分组匹配

分组匹配表示在文本中搜索一段特定的模式,并将这段模式分组,同时还可以进行重复匹配。常用的分组匹配操作符有:

  • ():将多个操作符分组。
  • \1:引用第一个分组匹配到的内容。
  • \2:引用第二个分组匹配到的内容。
  • ...

例如:

let regExp = /([a-z]+)\d+/; // 匹配一个小写字母的字符串,后面紧跟着一个或多个数字字符
let match = regExp.exec('hello123');
console.log(match[0]); // hello123
console.log(match[1]); // hello
常见操作
区分大小写

正则表达式默认是区分大小写的,如果需要进行不区分大小写的匹配,可以在正则表达式中添加i修饰符:

let regExp = /hello/i; // 不区分大小写地匹配hello
regExp.test('hello') // true
regExp.test('Hello') // true
全局匹配

正则表达式默认只匹配第一个符合条件的字符串,如果需要匹配所有符合条件的字符串,可以在正则表达式中添加g修饰符:

let regExp = /hello/g; // 对所有符合条件的文本进行匹配
let text = 'hello world, hello javascript!';
let matches = text.match(regExp);
console.log(matches); // ['hello', 'hello']
替换文本

正则表达式可以方便地进行字符串替换,使用replace()函数可以完成替换操作。例如:

let text = 'hello world, hello javascript!';
let result = text.replace(/hello/, 'hi');
console.log(result); // 'hi world, hello javascript!'

在上述代码中,正则表达式/hello/用于匹配所有的'hello'字符串,并将它们替换为'hi'字符串。

总结

JavaScript对正则表达式进行了完整的支持,程序员可以使用正则表达式完成字符串的快速搜索和替换等操作。本文介绍了正则表达式的基本语法、匹配模式、常见操作等内容,希望可以帮助读者更好地理解和使用正则表达式。