JS的replace方法介绍


在JavaScript中,`replace()` 方法是一个非常常用的字符串方法,它用于在字符串中查找一个匹配项,并将其替换为新的子串。这个方法可以接收两个参数:

1. **查找值(pattern)**:这个参数可以是一个字符串或一个正则表达式,用于在原始字符串中查找匹配项。

2. **替换值(replacement)**:这个参数可以是一个字符串或一个函数,用于替换掉所有找到的匹配项。如果是一个字符串,则可以直接使用;如果是一个函数,则该函数会在每次匹配时被调用,并且它的返回值会被用作替换文本。

### 基本用法

#### 使用字符串作为替换值


let str = "Hello World";
let newStr = str.replace("World", "JavaScript");
console.log(newStr); // 输出: "Hello JavaScript"

#### 使用正则表达式作为查找值


let str = "Hello World. World is great.";
let newStr = str.replace(/World/g, "JavaScript");
console.log(newStr); // 输出: "Hello JavaScript. JavaScript is great."

注意,在上面的例子中,我使用了正则表达式`/World/g`来匹配所有的"World"实例,并且`g`标志表示全局搜索。

#### 使用函数作为替换值


let str = "Apple price: $1.50, Banana price: $2.00";
let newStr = str.replace(/\$(\d+(\.\d+)?)/g, (match, p1) => `$${parseFloat(p1).toFixed(2)}`);
console.log(newStr); // 输出: "Apple price: $1.50, Banana price: $2.00"(在这个例子中,由于价格已经是两位小数,所以看起来没有变化)

// 但如果价格不是两位小数,比如 "$1"
let str2 = "Apple price: $1, Banana price: $2.00";
let newStr2 = str2.replace(/\$(\d+(\.\d+)?)/g, (match, p1) => `$${parseFloat(p1).toFixed(2)}`);
console.log(newStr2); // 输出: "Apple price: $1.00, Banana price: $2.00"

在这个例子中,我使用了一个函数来作为替换值,这个函数接收整个匹配项和第一个捕获组作为参数,然后返回格式化后的价格字符串。

### 注意事项

- 如果不设置全局标志(`g`),`replace()` 方法将只替换第一个匹配项。

- 当使用正则表达式作为查找值时,可以使用捕获组(`()`)来捕获匹配的子字符串,这些子字符串可以在替换字符串或替换函数中通过特殊的`$n`语法(其中`n`是捕获组的索引)或作为函数参数来引用。

- 替换字符串中的`$`和`\`字符需要被转义(即使用`$$`和`\\`),因为它们在替换字符串中有特殊的含义。