【问题标题】:How do you get the the string between two markers even if there is multiple for the string inside it in nodes即使节点中有多个字符串,如何获取两个标记之间的字符串
【发布时间】:2021-07-27 18:48:07
【问题描述】:

我试图制作一个节点程序,它接受一个字符串,并获取其中的所有内容:

var str = "Hello {world}!";

console.log(getBracketSubstrings(str)); // => ['world']

它有效,但是当我这样做时:

var str = "Hello {world{!}}";
console.log(getBracketSubstrings(str)); // => ['world{!']

它返回['world{!}'],当我希望它返回时:

['world{!}']

是否有办法对节点中的字符串执行此操作?

【问题讨论】:

    标签: node.js string substring


    【解决方案1】:

    您可以使用带有捕获组的模式,从 { 开始匹配,后跟任何字符,使用 [^}]* 的结束卷曲除外,直到遇到 }

    {([^}]*)}
    

    查看regex demo

    const getBracketSubstrings = s => Array.from(s.matchAll(/{([^}]*)}/g), x => x[1]);
    console.log(getBracketSubstrings("Hello {world}!"));
    console.log(getBracketSubstrings("Hello {world{!}}"));

    【讨论】:

    • 这很好,但是有没有办法得到最终的}?
    • @user14929391 喜欢这个? {([^{}]+(?:{[^{}]*})?)}regex101.com/r/GZJaWH/1
    • 这很好用,很抱歉再次打扰您,但是如果另一个括号子字符串中有多个括号子字符串,它似乎不起作用,这可能吗?如果没有,那很好
    • 那你要匹配balanced parenthesisJavascript正则表达式不支持递归。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多