我需要选择在双括号和双大括号之间的字符串中的值,但是允许使用非双大括号和括号。
对于双大括号,我使用了下面的表达式,但是如果它在字符串中有一个大括号,它就坏了。只有用双大括号才能打破这种情况,但我不知道如何生成正则表达式。
/{{([^}]*)}}/g和
/\({2}([^)]*)\){2}/g我试过在这里添加双支撑,但它不起作用:
/{{([^}}]*)}}/g发布于 2018-12-09 09:05:17
因为您希望允许在内部使用单个大括号,所以不应该使用负号字符集--而是从左边的分隔符开始,然后懒惰地重复任何字符,直到到达正确的分隔符为止。例如:
/{{(.*?)}}/
const pattern = /{{(.*?)}}/g;
const str = 'foo{{bar}} foo{{baz}} foo{{with}bracket}}';
console.log(str.match(pattern));
发布于 2018-12-09 09:14:05
我想你漏掉了括号里的反斜杠。
也许像/\{\{([^)]+)\}\}/这样的东西会起作用
示例:
console.log("{{TEST}}".match(/\{\{([^)]+)\}\}/)[1]);
console.log("{{TE{{}}ST}}".match(/\{\{([^)]+)\}\}/)[1]);
希望这有帮助
发布于 2018-12-09 09:32:29
“确定性表现”说的是正确的。我只想为括号和大括号添加一个表达式,正如您所问的那样。
**您可以对括号和大括号进行此操作**
((?:{{)(.*?}}))|((?:\(\()(.*?\)\)))
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);
https://stackoverflow.com/questions/53690784
复制相似问题