匹配字符串,但忽略括号之间的匹配 - 正则表达式和JavaScript

时间:2017-06-07 11:26:58

标签: javascript regex

我有以下字符串示例:

 "1. go [south], but look out for the trout pouting [lout]"
 "2. go [south], but be wary of the pouting [lout]"
 "3. go [south], but be wary of the sullen-looking [lout]"

我希望查询字 out 匹配,如果它出现在每个字符串中,但如果它在括号之间,则会被忽略。所以我想要匹配:

  1. out 鳟鱼 pouting
  2. pouting
  3. 我设法得到了这个表达式:

    /[^\(\)\[\]]out\s(?![\]])/ig
    

    但是,它只匹配 out trout 的第一个字符串。

    我已经发现空白字符是影响因素,因为它不匹配 pouting ,但摆脱它也会匹配括号之间的所有内容。

    这个正确的正则表达式是什么?

1 个答案:

答案 0 :(得分:1)

假设[...]是平衡的且没有转义,您可以使用基于前瞻性的负面搜索:

/out(?![^\[\]]*\])/

(?![^\[\]]*\])是一个负面的预测,声称我们前面没有][和非]字符因此确保我们不匹配out内的[...]

用于构建正则表达式的Javascript代码:

search = "out";
var regex = new RexExp(search + "(?![^\\[\\]]*\\])", "g");

RegEx Demo