0

我想用正则表达式匹配这样的字符串:

@media only screen and (max-width: 479px){
.abv{style:value;style:value}
.xyz{style:value;style:value}

}

但不知何故我不能。我的正则表达式开始时/ @media[^{]*\{ /gim 想要匹配除以下之外}}的所有内容}} /@media[^{]*\{[^}}]*\}(?=})/gim-这不起作用,因为[^}}] == [^}]...我不知道如何使正则表达式像这样工作请帮助

4

5 回答 5

1

来自Respond.js,这里有一个Demo

@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+[^\}]+\}
于 2014-07-16T03:07:12.037 回答
0

你要这个:

/@media[^{]*\{(?:(?!\}\s*\}).)*/gis

在 Regexr 上查看

  1. 您不需要m修饰符,它仅适用于锚点^$

  2. 您的意思是s使.匹配也成为换行符的修饰符。您没有.在您的正则表达式中使用,但我使用了。

  3. 使用此构造可以实现您想要实现的目标,这意味着仅当下一个字符不是a后跟另一个字符之间可能有空格(?:(?!\}\s*\}).)*时才匹配。这个断言由否定的前瞻来保证。开头的组只是一个非捕获组,没什么特别的。}}(?!\}\s*\})?:

于 2012-11-21T09:46:10.550 回答
0

你也可以试试这个/@media[^\(]+[^\)]+\){([^{]+[^}]+})+[^}]+}/ig

于 2012-11-21T09:48:56.870 回答
0

试试这个:

@media[^\{]*\{([^\{]+\{[^\}]+\}\n*)*\n*\}
于 2012-11-21T10:06:07.140 回答
0

不是 100% 确定这是如何工作的,但它似乎(来自此页面上其他条目的试验和错误)

/(@media[^{]*{(?:(?!}\s*}).)*}.*?})/s
于 2013-01-31T11:36:03.070 回答