Regex的高级替换方式有很多表达式



我没有在regex的文档中找到解决当前问题的方法。我使用的是javascript,html。我的代码是这样的:

var text = 'This [close](animal) is a dog';

我想使用regex:

'This {animal} is a dog';

我的意思是,我想用{}替换"丢失">。我知道,有一个解决方案像:

var res = text.replace('[close](','{').replace(')','}');

但就我而言,我有很多规则,我不想重复这一行。有时我会使用其他替换,如'[xxxxx]'。知道吗?非常感谢。

您可以使用

var text = 'This [close](animal) is a dog';
console.log(text.replace(/[[^][]*](([^()]*))/g, '{$1}'));

请参阅regex演示。

详细信息

  • [-[字符
  • [^][]*-除[]之外的0个或更多个字符
  • ](-一个](子串
  • ([^()]*)-捕获组1:除()之外的任何0个或多个字符
  • )-一个)字符

{$1}替换是用大括号括起来的捕获组的内容。

如果在[...]中只能有两个值——closeopen,并且用{...}替换close,用}...{替换open,则可以使用

var text = '[open](animal)This [close](animal) is a dog';
console.log(text.replace(/[(open|close)](([^()]*))/g, function($0, $1, $2) { 
return $1==='close' ? '{'+$2+'}' : '}'+$2+'{';})
);

别忘了,您可以在Array.prototype.replace中传递自定义正则表达式。在您的情况下,它将是text.replace(/[close](/g,'{')。你的问题的完整解决方案看起来像:

var res = res.replace(/[w+]((.*))/, (a, b) => {
console.log(a, b);
return `{${b}}`;
});

.*周围的括号用于"捕获"变量b内的动物

谢谢Wiktor,我通过你所说的找到了解决方案

var res0 = text.replace(/[close](([^()]*))/g, '{$1}');
var res1 = text.replace(/[open](([^()]*))/g, '}$1{');

对不起,如果我错了,我不习惯英语表达,所以:-(

相关内容

最新更新