如何仅在大括号外搜索正则表达式

时间:2012-02-23 19:42:11

标签: javascript regex string exec match

我有这个正则表达式变量:

var regexp = new RegExp(RegExp.quote(myExpression) + '\\b', 'g');

搜索后面有空格的表达式。 (RegExp.quate()我从这个How to escape regular expression in javascript?

获得

我只想在大括号外搜索

所以,如果我myExpression = "cat"

我有这个字符串:

the cat { is cat { and } cat {and { another cat } } and  cat } and another cat
    ^^^                                                                    ^^^

我想只为第一只猫和最后一只猫获得一个匹配 - 我不希望在外部花括号内有任何匹配。

我为此找到了一些正则表达式,但是没有像我希望的那样工作。

我需要写什么来完成它?

感谢, 阿龙

2 个答案:

答案 0 :(得分:2)

使用单个正则表达式无法解决匹配嵌套括号的问题。以下是解决问题的方法:

var myExpression = "cat";
var s = 'the cat {is cat { and} cat {and { another cat}}and  cat } and another cat';
arr = s.split(/(?=(?:\b|\W))\s*/g);
document.writeln("<pre>split: " + arr + "</pre>");
//prints: the,cat,{,is,cat,{,and,},cat,{,and,{,another,cat,},},and,cat,},and,another,cat
var level=0;
for (i=0; i<arr.length; i++) {
  if (level == 0 && arr[i] == myExpression)
     document.writeln("<pre>Matched: " + arr[i] + "</pre>");
  if (arr[i] == "{")
     level++;
  else if (arr[i] == "}")
     level--;
}

答案 1 :(得分:0)

一种策略是用空字符串查找/替换所有{。*} ...然后查找所有猫?