如何在正则表达式中用不同的文本替换不同的匹配组

How to replace different matching groups with different text in Regex

我有以下文字:

dangernounC2
cautionnounC2
alertverbC1
dangerousadjectiveB1

我需要的输出是:

danger (n)
caution (n)
alert (v)
dangerous (adj)

如果列表是,例如,所有名词或所有动词等,我会知道如何做到这一点,但是有没有办法用不同的对应文本替换每个匹配组?

这是适合您的正则表达式。但这是一种只有在这种替换是匹配的一部分时才有效的技巧。

正则表达式

(n)ounC2|(v)erbC1|(adj)ectiveB1

换人

 ()

Use () instead if you're using Python

说明

(n)ounC2|(v)erbC1|(adj)ectiveB1 将匹配 nounC2verbC1adjectiveB1

当它匹配nounC2时,第1组将包含n,第2组和第3组不包含任何内容
当它匹配 verbC1 时,第 2 组将包含 v,第 1 组和第 3 组不包含任何内容
当它匹配 adjectiveB1 时,第 3 组将包含 adj,第 1 组和第 2 组不包含任何内容

每个匹配项都替换为 space,后跟括号之间的 3 个组的值。

演示

Demo on RegEx101

代码片段(JavaScript)

const regex = /(n)ounC2|(v)erbC1|(adj)ectiveB1/gm;
const str = `
dangernounC2
cautionnounC2
alertverbC1
dangerousadjectiveB1
eatverbC1
prettyadjectiveB1`;
const subst = ` ()`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);