【问题标题】:How to search regex only outside curly brackets如何仅在大括号外搜索正则表达式
【发布时间】:2012-03-14 06:30:53
【问题描述】:

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

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
    ^^^                                                                    ^^^

我只想匹配第一只猫和最后一只猫 - 我不想匹配外部大括号内的任何内容。

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

我需要写什么来完成它?

谢谢, 阿隆

【问题讨论】:

  • 单个正则表达式实际上无法检测是否存在外部匹配的、可任意嵌套的 { } 对;所以你需要稍微改变一下。如果您明确说明您实际上想要做什么,我们可以尝试提供帮助。能否贴出需要使用regexp的代码?

标签: javascript regex string exec match


【解决方案1】:

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

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

【讨论】:

  • 太棒了——我会实现这个方法。我有一种感觉它应该这样工作,但你真的向我展示了它应该如何完成
【解决方案2】:

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

【讨论】:

  • 鉴于 OP 的正则表达式将始终匹配完全相同的子字符串(由于使用 RegExp.quote),您的建议可以提供帮助的唯一方法是,如果 OP 的目标仅仅是 count"cat" 的实例(可能是这种情况——我不知道——但不知何故,我似乎不太可能)。
  • 假设 cat 是一个例子......并且 cat 实际上是某种模式,他想要“cat”的内容然后它会起作用。只是寻找最简单的可行的方法。
  • 当然你必须处理这样的例子:---the cat {is cat} cat {and cat {and cat} and cat } and another cat --- 这很难做到使用正则表达式...所以使用像 anubhava 建议的过程可能是最好的。这与尝试使用正则表达式解析 xml 或 html 属于同一类别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2019-11-17
相关资源
最近更新 更多