首页 文章

使用正则表达式搜索双括号文本或双括号

提问于
浏览
4

我需要选择双括号和双括号之间的字符串中的值,但允许非双括号和括号

我使用以下表达式进行双括号,但如果它在字符串中有一个支撑则会被破坏 . 这应该只能通过双支撑来打破,但我不知道如何制作正则表达式

/{{([^}]*)}}/g

/\({2}([^)]*)\){2}/g

我尝试在这里添加双括号,但它不起作用:

/{{([^}}]*)}}/g

3 回答

  • 1

    @certainperformance所说的是正确的 . 我只想为你提出的问题添加括号和括号的表达式 .

    您可以尝试使用括号和括号

    ((?:{{)(.*?}}))|((?:\(\()(.*?\)\)))
    

    Demo

    const regex = /((?:{{)(.*?}}))|((?:\(\()(.*?\)\)))/gm;
    const str = `foo{{bar}} foo{{baz}} foo{{with}bracket}}
    
    foo((hello))
    
    
    test{{test))
    
    {{test))
    {{test}}
    ((test))
    test))
    `;
    let m;
    
    let op = str.match(regex);
    console.log(op);
    
  • 5

    因为你想在内部允许单个括号,所以你不应该使用负字符集 - 而是从左边界定开始并懒惰重复任何字符,直到你到达正确的分隔符 . 例如:

    /{{(.*?)}}/
    
    const pattern = /{{(.*?)}}/g;
    const str = 'foo{{bar}} foo{{baz}} foo{{with}bracket}}';
    console.log(str.match(pattern));
    
  • 0

    我想你错过了括号中的反斜杠 .

    也许像 /\{\{([^)]+)\}\}/ 这样的东西会起作用

    例:

    console.log("{{TEST}}".match(/\{\{([^)]+)\}\}/)[1]);

    console.log("{{TE{{}}ST}}".match(/\{\{([^)]+)\}\}/)[1]);

    希望有所帮助

相关问题