String.prototype.replaceAll()
的用法。
假设炭治郎正在阅读一本包含错误鬼名字的书,他需要将所有错误的鬼名字替换为正确的名字。
错误的鬼名字书籍
let bookContent = `
炭治郎遇到了一个叫恶鬼的鬼。
恶鬼非常凶残。
为了保护妹妹祢豆子,炭治郎必须击败恶鬼。
`;
// 使用 replaceAll() 将所有的 "恶鬼" 替换为 "无惨"
let correctedBookContent = bookContent.replaceAll('恶鬼', '无惨');
console.log(correctedBookContent);
输出
炭治郎遇到了一个叫无惨的鬼。
无惨非常凶残。
为了保护妹妹祢豆子,炭治郎必须击败无惨。
在这个例子中,我们使用 replaceAll()
方法将所有出现的 "恶鬼" 替换为 "无惨"。这样炭治郎可以正确地识别和对抗鬼。
String.prototype.matchAll()
的用法。
假设我们有一段包含鬼杀队成员名字的文本,我们想找出所有成员名字的位置和内容。
const text = `
炭治郎是鬼杀队的一员。
祢豆子是他的妹妹。
善逸和伊之助是炭治郎的朋友。
蝴蝶忍和富冈义勇是柱。
`;
const regex = /炭治郎|祢豆子|善逸|伊之助|蝴蝶忍|富冈义勇/g;
const matches = text.matchAll(regex);
for (const match of matches) {
console.log(`找到: ${match[0]} 在位置 ${match.index}`);
}
输出
找到: 炭治郎 在位置 1
找到: 祢豆子 在位置 10
找到: 善逸 在位置 22
找到: 伊之助 在位置 25
找到: 蝴蝶忍 在位置 33
找到: 富冈义勇 在位置 38
在这个例子中,matchAll
返回一个迭代器,用于找到文本中所有匹配的成员名字及其位置。这样,我们可以列出所有鬼杀队成员的出现位置。
RegExp.prototype.hasIndices
属性用法
假设我们有一个字符串,其中包含《鬼灭之刃》中的一些角色名称,并且我们希望找到所有以 "炭" 开头的名字,并获取它们在字符串中的起始和结束位置。
下面是一个具体的例子:
// 我们的字符串中包含《鬼灭之刃》中的一些角色名称
const text = "炭治郎、祢豆子、善逸、伊之助、炭治郎和祢豆子。";
// 正则表达式,匹配以 "炭" 开头的名字
const regex = /炭\w+/gd;
// 使用 hasIndices 属性
console.log(regex.hasIndices); // true
// 获取匹配结果
const matches = [...text.matchAll(regex)];
matches.forEach(match => {
// match.indices[0] 包含匹配的起始和结束位置
const start = match.indices[0][0];
const end = match.indices[0][1];
console.log(`匹配到的名字: "${match[0]}" 在位置: ${start}-${end}`);
});
在这个例子中,我们使用了带有 d
标志的正则表达式 /炭\w+/gd
,其中:
/炭\w+/
是我们的正则表达式,匹配以 "炭" 开头的名字。g
标志表示全局搜索,匹配所有符合条件的子字符串。d
标志表示启用匹配索引信息。
运行这段代码时:
regex.hasIndices
会返回true
,表示我们启用了索引信息。text.matchAll(regex)
将返回一个迭代器,其中包含匹配的所有结果。- 我们遍历这些匹配结果,并分别输出每个匹配子字符串的起始和结束位置。
输出将会是:
匹配到的名字: "炭治郎" 在位置: 0-3
匹配到的名字: "炭治郎" 在位置: 18-21
这样,我们就可以清楚地看到每个匹配的名字在字符串中的具体位置。这对于需要精确定位匹配结果的场景非常有用。
带索引的正则表达式匹配(hasIndices
)
假设我们有一段描述鬼杀队成员战斗情况的文本,并且我们想找到所有成员名字及其在文本中的索引。
const text = `
炭治郎和祢豆子正在与无惨战斗。
善逸和伊之助也赶来支援。
`;
// 创建正则表达式并启用索引捕获
const regex = /炭治郎|祢豆子|善逸|伊之助/gd;
const matches = [...text.matchAll(regex)];
matches.forEach(match => {
console.log(`找到: ${match[0]} 在位置 [${match.indices[0][0]}, ${match.indices[0][1]}]`);
});
输出
找到: 炭治郎 在位置 [1, 4]
找到: 祢豆子 在位置 [5, 8]
找到: 善逸 在位置 [19, 21]
找到: 伊之助 在位置 [22, 25]
在这个例子中,我们使用 hasIndices
标志 (d
) 来启用匹配索引捕获。match.indices
返回每个匹配的开始和结束位置,使我们能够精确地定位每个名字在文本中的位置。