正则表达式匹配方括号内大括号内的字符串

时间:2020-06-29 13:00:00

标签: javascript regex

var q = '{[{main}(other data)][{data}(other data)][{address}(other data)]}';

var qm = q.match(/\[(.*?)\]/g);  

console.log(qm);

上面的正则表达式返回括号之间的文本。

例如:

 [{data}(other data)]

如何重写上面的正则表达式,所以我提供了一个类似'data'的字符串,它将返回[{data}(other data)]。即带有括号的部分,其中大括号中包含字符串。

2 个答案:

答案 0 :(得分:1)

在花括号内匹配字符串

\[{data}\(.*?*\)\]

Regex Demo

var q = '{[{main}(other data)][{data}(other data)][{address}(other data)]}';

var qm = (str) => q.match(new RegExp(`\\[{${str}}\\(.*?\\)\\]`, 'g'));

console.log(qm('data'));

在花括号和括号内匹配字符串

\[{data}\(.*?data[^)]*\)\]

Regex Demo

var q = '{[{main}(other data)][{data}(other data)][{address}(other data)]}';

var qm = (str) => q.match(new RegExp(`\\[{${str}}\\(.*?${str}[^)]*\\)\\]`, 'g'));

console.log(qm('data'));

答案 1 :(得分:0)

使用您的qm变量,可以遍历匹配并测试第一个花括号之间的字符串,如下所示:

var q = '{[{main}(other data)][{data}(other data)][{address}(other data)]}';
var qm = q.match(/\[(.*?)\]/g);

for (let e of qm)
  if (e.match('\{([^\)]+)\}')[1] == "data")
    console.log(e);