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

时间:2018-12-09 09:03:11

标签: javascript regex

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

我对双括号使用了以下表达式,但是如果字符串中有括号则将其打断。这只能通过双括号来打破,但我不知道如何制作正则表达式

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

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

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

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

3 个答案:

答案 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所说的是正确的。 我只想根据您的要求为括号和花括号添加一个表达式。

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

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

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);