正则表达式高级替换很多表达式的方法

时间:2018-10-30 08:44:55

标签: javascript regex replace

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

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

我想使用 regex 来获取此信息:

'This {animal} is a dog';

我的意思是,我想将“关闭” 替换为 {} 。 我知道,有类似的解决方案:

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

但就我而言,我有很多规则,并且我不想重复该行。有时我正在使用其他替代方法,例如'[xxxxx]'。 任何想法?谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用

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

请参见regex demo

详细信息

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

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

如果在close内只能有两个值-open[...],然后将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+'{';})
);

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

谢谢Wiktor,我已经找到了您所说的解决方案

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

对不起,如果我做错了,我不习惯用英语表达:-)