在括号之间获取文本

时间:2015-06-05 20:00:50

标签: javascript regex string

在Javascript中我想得到一个表示两个括号之间所有文本的字符串,即使该字符串包含更多括号。

它的工作原理如下:

"(a)(b)(c)" .match(SOMETHING);

  

[""" B"" C"]

OR

  

""

"((a)(b)(c))" .match(SOMETHING);

  

"(a)(b)(c)"

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

(?:\()[^\(\)]*?(?:\))

工作原理

  • \(匹配左括号
  • \)匹配右括号
  • [^\(\)]匹配除了更多括号之外的任何内容
  • *?为上述模式添加零次或多次量词(由?设置为懒惰)

JavaScript实现

尝试:

your_string.match(/(?:\()[^\(\)]*?(?:\))/g)

答案 1 :(得分:0)

你是否关心这些parens是否匹配? 如果是这样,你将不得不使用堆栈,你不能使用正则表达式。

尝试这样的事情:



var str = "aaa((0)12(2))bbb";
var stack = [];
var result  ="";
var start = false;

for (var i = 0; i < str.length; i++) {
  switch (str[i]) {
    case '(':
      stack.push('(');
      if (!start) {
        start = true;
        continue;
      }
      result += str[i];
    break;
    case ')':
      if (stack[stack.length - 1] === '(') {
        stack.pop();
        if (stack.length === 0) {
          start = false;
          continue;
        }
        result += str[i];
      } else {
        //not balanced!
      }
      
    break;
    default:
      if (start){
        result += str[i];
      }
  }
}

console.log(result);
&#13;
&#13;
&#13;