我需要选择双括号和双括号之间的字符串中的值,但允许非双括号和括号
我对双括号使用了以下表达式,但是如果字符串中有括号则将其打断。这只能通过双括号来打破,但我不知道如何制作正则表达式
/{{([^}]*)}}/g
和
/\({2}([^)]*)\){2}/g
我尝试在此处添加双括号,但这不起作用:
/{{([^}}]*)}}/g
答案 0 :(得分:5)
因为要在其中允许使用大括号,所以不应该使用负字符集-而是从左定界符开始并懒惰重复任何字符,直到到达右定界符为止。例如:
/{{(.*?)}}/
const pattern = /{{(.*?)}}/g;
const str = 'foo{{bar}} foo{{baz}} foo{{with}bracket}}';
console.log(str.match(pattern));
答案 1 :(得分:1)
我认为您在括号中缺少反斜杠。
也许像/\{\{([^)]+)\}\}/
这样的东西会起作用
示例:
console.log("{{TEST}}".match(/\{\{([^)]+)\}\}/)[1]);
console.log("{{TE{{}}ST}}".match(/\{\{([^)]+)\}\}/)[1]);
希望有帮助
答案 2 :(得分:0)
@certainperformance所说的是正确的。 我只想根据您的要求为括号和花括号添加一个表达式。
**您可以尝试使用括号和大括号**
((?:{{)(.*?}}))|((?:\(\()(.*?\)\)))
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);