Js中的正则表达式

RegExp 对象

RegExp 对象

RegExp 对象是 JavaScript 中用于处理正则表达式的内置对象。它提供了一种强大的方式来匹配、搜索和替换字符串中的文本模式。以下是关于 RegExp 对象的详细介绍:

1. 创建 RegExp 对象

1.1 使用字面量语法

1
let regex = /pattern/flags;
  • pattern:要匹配的文本模式。
  • flags:可选的标志,用于修改匹配行为。常见的标志有:
    • g:全局匹配,匹配所有符合条件的子字符串。
    • i:忽略大小写,进行不区分大小写的匹配。
    • m:多行匹配,使 ^$ 在多行模式下工作,即匹配每一行的开始和结束。
    • s:允许点号(.)匹配换行符。
    • u:Unicode 模式,正确处理 Unicode 字符。
    • y:粘性匹配,从上次匹配结束的位置开始匹配。

1.2 使用构造函数

1
let regex = new RegExp(pattern, flags);
  • pattern:要匹配的文本模式,可以是字符串或另一个 RegExp 对象。
  • flags:可选的标志,用于修改匹配行为。

2. RegExp 对象的属性

2.1 source

  • 描述:返回正则表达式的文本内容。
  • 示例
    1
    2
    let regex = /abc/g;
    console.log(regex.source); // 'abc'

2.2 flags

  • 描述:返回正则表达式使用的标志。
  • 示例
    1
    2
    let regex = /abc/gi;
    console.log(regex.flags); // 'gi'

2.3 global

  • 描述:布尔值,表示是否设置了 g 标志。
  • 示例
    1
    2
    let regex = /abc/g;
    console.log(regex.global); // true

2.4 ignoreCase

  • 描述:布尔值,表示是否设置了 i 标志。
  • 示例
    1
    2
    let regex = /abc/i;
    console.log(regex.ignoreCase); // true

2.5 multiline

  • 描述:布尔值,表示是否设置了 m 标志。
  • 示例
    1
    2
    let regex = /abc/m;
    console.log(regex.multiline); // true

2.6 lastIndex

  • 描述:一个整数,表示下一次匹配的开始位置。仅在全局匹配模式下有效。
  • 示例
    1
    2
    3
    4
    5
    6
    let regex = /a/g;
    let str = 'aaa';
    regex.exec(str); // ['a']
    console.log(regex.lastIndex); // 1
    regex.exec(str); // ['a']
    console.log(regex.lastIndex); // 2

3. RegExp 对象的方法

3.1 exec(string)

  • 描述:在指定字符串中执行一个搜索匹配。如果匹配成功,则返回一个结果数组;否则返回 null。结果数组包含以下属性:
    • 0:匹配的整个字符串。
    • 123 等:捕获组的内容。
    • index:匹配的起始位置。
    • input:原始字符串。
    • groups:命名捕获组的对象。
  • 示例
    1
    2
    3
    4
    5
    6
    let regex = /a(b)c/g;
    let str = 'abcabc';
    let result = regex.exec(str);
    console.log(result); // ['abc', 'b', index: 0, input: 'abcabc', groups: undefined]
    console.log(result[0]); // 'abc'
    console.log(result[1]); // 'b'

3.2 test(string)

  • 描述:在指定字符串中执行一个搜索匹配。如果匹配成功,则返回 true;否则返回 falsetest 方法不返回匹配结果,仅返回布尔值。
  • 示例
    1
    2
    3
    let regex = /a/g;
    let str = 'abc';
    console.log(regex.test(str)); // true

3.3 toString()

  • 描述:返回正则表达式的字符串表示形式。
  • 示例
    1
    2
    let regex = /abc/gi;
    console.log(regex.toString()); // '/abc/gi'

4. 示例

4.1 匹配和替换

1
2
3
4
let str = 'Hello, World!';
let regex = /World/g;
let newStr = str.replace(regex, 'JavaScript');
console.log(newStr); // 'Hello, JavaScript!'

4.2 全局匹配

1
2
3
4
let str = 'abcabcabc';
let regex = /abc/g;
let matches = str.match(regex);
console.log(matches); // ['abc', 'abc', 'abc']

4.3 命名捕获组

1
2
3
4
let str = '2023-10-10';
let regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
let result = str.match(regex);
console.log(result.groups); // { year: '2023', month: '10', day: '10' }

5. 总结

RegExp 对象是 JavaScript 中处理正则表达式的核心工具,提供了丰富的属性和方法来执行匹配、搜索和替换操作。掌握 RegExp 对象的使用,可以帮助你更高效地处理字符串和文本模式匹配。

1
2
3
var patt=new RegExp(pattern,modifiers);  
或者更简单的方式:
var patt=/pattern/modifiers;
  • pattern(模式) 描述了表达式的模式
  • modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配
1
2
var re = new RegExp("\\w+");
var re = /\w+/;

一般而言正则表达式由下面几点组成,详情查看正则表达式

  • 修饰符
  • 方括号
  • 元字符
  • 量词

RegExp 对象方法

RegExp 对象属性

支持正则表达式的 String 对象的方法

在 JavaScript 中,String 对象提供了几个支持正则表达式的方法,这些方法可以用于执行各种字符串匹配、搜索、替换等操作。以下是一些常用的 String 方法及其使用示例:

1. match()

match() 方法对字符串执行匹配搜索,并将匹配的结果作为数组返回。如果没有匹配,则返回 null

语法

1
str.match(regexp)

示例

1
2
3
4
const text = 'Hello world! Welcome to the world of JavaScript.';
const pattern = /world/g;
const matches = text.match(pattern);
console.log(matches); // ['world', 'world']

2. matchAll()

matchAll() 方法返回一个包含所有匹配项的迭代器。每个匹配项都是一个数组,包含匹配结果和捕获组。

语法

1
str.matchAll(regexp)

示例

1
2
3
4
5
6
const text = 'Hello world! Welcome to the world of JavaScript.';
const pattern = /world/g;
const matches = text.matchAll(pattern);
for (const match of matches) {
console.log(match); // ['world', index: 6, input: 'Hello world! Welcome to the world of JavaScript.', groups: undefined]
}

search() 方法执行匹配搜索,返回匹配项的索引,如果没有匹配,则返回 -1

语法

1
str.search(regexp)

示例

1
2
3
4
const text = 'Hello world! Welcome to the world of JavaScript.';
const pattern = /world/;
const index = text.search(pattern);
console.log(index); // 6

4. replace()

replace() 方法在字符串中查找匹配项,然后使用新的子字符串替换匹配项。可以使用字符串或正则表达式来指定匹配项,可以使用字符串或函数来指定替换项。

语法

1
str.replace(regexp|substr, newSubStr|function)

示例

1
2
3
4
const text = 'Hello world! Welcome to the world of JavaScript.';
const pattern = /world/g;
const newText = text.replace(pattern, 'universe');
console.log(newText); // 'Hello universe! Welcome to the universe of JavaScript.'

5. split()

split() 方法使用指定的分隔符字符串将一个字符串分割成多个子字符串,并将结果作为数组返回。分隔符可以是一个字符串或正则表达式。

语法

1
str.split(separator, limit)

示例

1
2
3
4
const text = 'Hello world! Welcome to the world of JavaScript.';
const pattern = /\s+/; // 匹配一个或多个空白字符
const words = text.split(pattern);
console.log(words); // ['Hello', 'world!', 'Welcome', 'to', 'the', 'world', 'of', 'JavaScript.']

6. includes()

includes() 方法用于检测一个字符串是否包含另一个指定的子字符串。虽然这个方法不直接使用正则表达式,但可以通过正则表达式预处理字符串来实现类似的功能。

语法

1
str.includes(searchString, position)

示例

1
2
3
4
5
6
7
8
const text = 'Hello world! Welcome to the world of JavaScript.';
const pattern = /world/;
const match = pattern.exec(text);
if (match) {
const index = match.index;
const substring = text.slice(index, index + match[0].length);
console.log(text.includes(substring)); // true
}

7. startsWith()endsWith()

startsWith()endsWith() 方法用于检测一个字符串是否以指定的子字符串开头或结尾。虽然这些方法不直接使用正则表达式,但可以通过正则表达式预处理字符串来实现类似的功能。

语法

1
2
str.startsWith(searchString, position)
str.endsWith(searchString, length)

示例

1
2
3
4
5
6
7
const text = 'Hello world! Welcome to the world of JavaScript.';
const patternStart = /^Hello/;
const patternEnd = /JavaScript\.$/;
const matchStart = patternStart.test(text);
const matchEnd = patternEnd.test(text);
console.log(matchStart); // true
console.log(matchEnd); // true

总结

这些 String 方法结合正则表达式,提供了强大的字符串处理功能,可以满足各种复杂的字符串操作需求。通过这些方法,可以轻松实现字符串的匹配、搜索、替换和分割等操作。
JavaScript RegExp 对象