提取大括号之间的字符串,但排除一些

时间:2019-11-07 07:13:55

标签: javascript regex

输入:

{abcd} {{abcd}} {{{abcd}}}

如何提取单括号或三括号包围的文本?如果括号括住,我不会发短信。

输出:

{abcd} {abcd}

输出中的第二个{abcd}从{{{abcd}}}

引出

您有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用正则表达式定义模式。

逻辑

  • 如果{{{{是字符串的开头或前面有空格,则开始寻找模式。
  • 捕获任何字符串,直到}}}}

您将不得不使用非捕获(?:)组来定义开始和结束。

var str = '{abcd} {{efgh}} {{{ijkl}}}';
var regex = /(?:^| )(?:\{|\{{3})(\w+)(?:\}|\}{3})/g

console.log(str.match(regex))

参考文献:

答案 1 :(得分:1)

如果您需要非regEx解决方案,请检查一下。我尝试使用常见的JS方法(例如:Array.fill()String.split()

)来使其尽可能简单和广泛

function textExtractor(input, startChar, endChar, count, ignoreFlag) {
  let startExpression = new Array(count).fill(startChar).join("");
  let endExpression = new Array(count).fill(endChar).join("");
  if (ignoreFlag) return input;
  else return input.split(startExpression)[1].split(endExpression)[0];
}

console.log(textExtractor("{abc}", "{", "}", 1, false));
console.log(textExtractor("{{abc}}}", "{", "}", 2, true));
console.log(textExtractor("{{{abc}}}", "{", "}", 3, false));

答案 2 :(得分:1)

如果您不着迷于性能,那么在2 .replaces()中进行操作将非常容易:

"{abcd} {{abcd}} {{{abcd}}}".replace(/(\s|^){{\w+}}/g,'').replace(/{{({\w+})}}/g, '$1')

第一步replace(/(\s|^){{\w+}}/g,'')删除了{{}}个元素

第二步replace(/{{({\w+})}}/g, '$1')将{{{}}}转换为{́}