在JavaScript上使用RegEx在多个圆括号中搜索唯一值

Searching for a unique value across multiple parenthesis with RegEx on JavaScript?

本文关键字:圆括号 搜索 唯一 JavaScript RegEx      更新时间:2024-03-08

示例

var value = "foo bar (foo(bar)(foo(bar)))";

你想要的价值是

(foo(bar)(foo(bar)))

而不是

(foo(bar)

正如elclarns所指出的,JS没有递归正则表达式,但正则表达式不是唯一的工具,括号计数器应该可以工作,好的

  var x = "foo bar (foo(bar)(foo(bar))) foo bar";
  var result = "";
  var cnt = 0;
  var record = false;
  for(var i=0; i<x.length; ++i) {
    var ch = x.charAt(i);
    if(ch=="(") { ++cnt; record = true; }
    if(ch==")") --cnt;
    if(record) result+= ch;
    if(record && !cnt) break;
  }
  if(cnt>0) record = ""; // parenthesis not enclosed
  console.log(result); // (foo(bar)(foo(bar)))

当然,这只捕获第一个括号,但您可以将它们全部记录在数组中,并选择最长的结果。这应该很容易。

这应该可以工作。

var re = /'(.*')/
var result = re.exec(value) //["(foo(bar)"]

然后它将捕获括号之间最大的字符串。