如果不是空的话,打开和关闭括号之间是否匹配?

时间:2016-02-21 18:40:37

标签: regex string

使用正则表达式,给定以下文本,如何匹配方括号之间的内容,但仅当它不为空时?

{
  "key": [  
   ],

   "match": [
      1,
      2,
      3,
      4
   ]
}

/:\s*\[([^\]\[]+)\]/g:这是我的尝试,虽然它匹配括号内的任何内容,包括空格(所需),我无法弄清楚如何仅在基本上是空数组的括号之间匹配(即)不仅仅是空格。

在上面的文字中,我想匹配第二个键的内容,但不匹配第一个键的空格。

重要的是我捕获空白以及我想保留格式,但如果没有或只有空格/换行符等,我不想捕获括号之间的内容。

你可以在这里查看和玩我的正则表达式: https://regex101.com/r/iN9cD5/3

感谢。

2 个答案:

答案 0 :(得分:4)

您可以利用负向前瞻:

:\s*\[(?!\s*])([^\]\[]+)\]
       ^^^^^^^

请参阅demo

(?!\s*])如果在下一个[之前]之后只有空白符号或没有任何内容,则会失败。

在PCRE正则表达式中,您可以删除一些冗余的转义符号并使用

:\s*\[(?!\s*])([^][]+)]`

查看另一个demo[^][]匹配[]之后的任何字符,因为在字符类开放]之后智能放置[并且[没有必须在PCRE正则表达式字符类中进行转义。

答案 1 :(得分:0)

你可以尝试这种模式:

/:\s*\[(\s+\S[^\]\[]+)\]/g

demo

它检查多个空格后跟一个非空格字符。