📜  正则表达式 javascript (1)

📅  最后修改于: 2023-12-03 15:10:57.831000             🧑  作者: Mango

正则表达式 JavaScript

正则表达式是文本处理中非常重要的一部分。JavaScript 是一个非常强大的编程语言,它可以通过正则表达式来处理文本数据。

本文将介绍正则表达式的用途、语法和常见应用,以及如何在 JavaScript 中使用正则表达式。

用途

正则表达式在文本处理中应用非常广泛。它可以用来匹配、查找、替换和验证字符串。

例如,你可以使用正则表达式来:

  • 验证一个字符串是否符合某种格式要求(例如电子邮件地址、电话号码等);
  • 在文本中查找某个单词或模式;
  • 去除一段文本中的标记(例如 HTML 标记)。
语法

正则表达式由一系列的字符和元字符组成,用来表达某种匹配规则。例如:

/abc/

这个正则表达式用来匹配字符串中的 "abc"。

其中 "/" 是正则表达式的分隔符,"abc" 是要匹配的字符串。

元字符

正则表达式中的元字符用来表示某种特殊意义。常见的元字符有:

  • .:匹配除 "\n" 之外的任何单个字符;
  • *:匹配前面的子表达式 0 次或多次;
  • +:匹配前面的子表达式 1 次或多次;
  • ?:匹配前面的子表达式 0 次或 1 次;
  • |:匹配两个或多个正则表达式中的任意一个;
  • ^:匹配输入字符串的开始位置;
  • $:匹配输入字符串的结束位置。
字符类

字符类用于匹配一组字符。例如:

  • [abc]:匹配 "a"、"b" 或 "c" 中的任意一个字符;
  • [^abc]:匹配除 "a"、"b" 和 "c" 之外的任意一个字符。
量词

量词用来指定正则表达式中的某个元素出现的次数。

常见的量词有:

  • {n}:匹配前面的子表达式恰好 n 次;
  • {n,}:匹配前面的子表达式至少 n 次;
  • {n,m}:匹配前面的子表达式至少 n 次,但不超过 m 次。
贪婪模式和非贪婪模式

正则表达式默认是贪婪模式,即尽可能匹配更多的字符。例如:

/\d+/

这个正则表达式将匹配文本中的任意连续数字。

如果要使用非贪婪模式,可以在量词后面加上 "?"。例如:

/\d+?/

这个正则表达式将匹配文本中的任意单个数字。

JavaScript 中的正则表达式

在 JavaScript 中,正则表达式可以通过字面量表示:

var re = /abc/;

也可以通过构造函数表示:

var re = new RegExp("abc");
RegExp 方法

test()

test() 方法用来测试一个字符串是否符合正则表达式的规则,返回值为 true 或 false。

例如:

var re = /abc/;
var str = "abc";
var result = re.test(str);
console.log(result); // true

exec()

exec() 方法用来在字符串中查找正则表达式第一个匹配的子串,并返回该子串。

例如:

var re = /abc/;
var str = "abcabc";
var result = re.exec(str);
console.log(result); // ["abc"]

如果正则表达式中有捕获组,则返回一个数组,其中第一个元素是整个匹配的子串,后面的元素依次是每个捕获组匹配的子串。

var re = /(ab)(c)/;
var str = "abcabc";
var result = re.exec(str);
console.log(result); // ["abc", "ab", "c"]
String 方法

match()

match() 方法用来在字符串中查找符合正则表达式规则的子串,并返回一个包含这些子串的数组。

例如:

var re = /abc/;
var str = "abcabc";
var result = str.match(re);
console.log(result); // ["abc", "abc"]

如果正则表达式中有捕获组,则返回一个数组,其中第一个元素是整个匹配的子串,后面的元素依次是每个捕获组匹配的子串。

var re = /(ab)(c)/;
var str = "abcabc";
var result = str.match(re);
console.log(result); // ["abc", "ab", "c", "abc", "ab", "c"]

replace()

replace() 方法用来替换字符串中符合正则表达式规则的字串,并返回替换后的字符串。

例如:

var re = /abc/;
var str = "abcabc";
var result = str.replace(re, "def");
console.log(result); // "defabc"

如果要替换所有匹配的子串,需要在正则表达式中使用全局模式(加上 "g" 标志)。

var re = /abc/g;
var str = "abcabc";
var result = str.replace(re, "def");
console.log(result); // "defdef"

search()

search() 方法用来查找符合正则表达式规则的子串在字符串中的位置,返回位置的索引值。

例如:

var re = /abc/;
var str = "abcabc";
var result = str.search(re);
console.log(result); // 0

如果查找不到符合规则的子串,则返回 -1。

split()

split() 方法用来将字符串按照正则表达式的规则拆分成一个数组。

例如:

var re = /abc/;
var str = "abcabc";
var result = str.split(re);
console.log(result); // ["", "", ""]

如果正则表达式中使用了捕获组,拆分后的数组中会包含捕获组中匹配的子串。

var re = /(ab)(c)/;
var str = "abcabc";
var result = str.split(re);
console.log(result); // ["", "ab", "c", "", "ab", "c", ""]
实际应用

正则表达式在实际的编程中应用非常广泛。以下是一些常见的应用场景。

验证

正则表达式可以用来验证用户输入的数据是否符合特定的格式要求。

例如,验证一个字符串是否为有效的电子邮件地址:

var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
var str = "test@example.com";
var result = re.test(str);
console.log(result); // true
查找与替换

正则表达式可以用来在文本中查找、匹配或替换特定的内容。

例如,将文本中的所有 URL 替换成链接:

var re = /(http|https|ftp):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/g;
var str = "Visit my website at http://www.example.com";
var result = str.replace(re, "<a href='$&'>$&</a>");
console.log(result); // "Visit my website at <a href='http://www.example.com'>http://www.example.com</a>"
去除标记

正则表达式可以用来去除一段文本中的所有 HTML 标记。

var re = /<[^>]+>/g;
var str = "<h1>Hello, world!</h1>";
var result = str.replace(re, "");
console.log(result); // "Hello, world!"
总结

本文介绍了正则表达式在 JavaScript 中的基本语法和常见应用场景。通过掌握正则表达式,可以提高编程的效率和代码质量。