输入:
{abcd} {{abcd}} {{{abcd}}}
如何提取单括号或三括号包围的文本?如果括号括住,我不会发短信。
输出:
{abcd} {abcd}
输出中的第二个{abcd}从{{{abcd}}}
引出您有什么想法吗?
答案 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')
将{{{}}}转换为{́}