2

我试图在我的 .less 文件中找到所有嵌套 4 层以上而没有关闭的地方。

这是我目前在 Rubular 上的位置: http: //rubular.com/r/a6uWyH0mUv

如果您希望在 SO 上查看示例:

ul {
    width:100%;
    li {
        width: 25%;
        a {
            color: @blue;
            span {
                font-weight: normal;
            }
        }
    }
}

ul {
    width:100%;
    li {
        width: 25%;
        a {
            color: @blue;
        }
    }
}

ul {
    width:100%;
    li {
        width: 25%;
    }
}

ul {
    width:100%;
}

我唯一要匹配的是第一个具有 4 个嵌套 css 属性的测试字符串。

通过各种实验,我已经能够非常接近,但我仍然最终匹配了不应该被正则表达式捕获的字符串部分。

任何帮助是极大的赞赏。

4

2 回答 2

1

[{][^}]*[{][^}]*[{][^}]*[{](.*)应该做的伎俩。

于 2013-08-23T22:26:09.327 回答
0
.*?(?:\{[^}]*?){4}(.*?\})

.*? makes sure to find the first one, not really necessary
(?:\{[^}]*?) finds 4 opening brackets without closing ones
(.*?\}) capturing group until the first closing bracket.

如果这不是你想要的,它可以很容易地修改。

在评论中解决您的要求:

.*?(?:\{[^}]*?){4}(.*?)\} 

只会为您提供括号 ( font-weight: normal;) 中包含的文本。我所做的只是从捕获组中删除右括号。

.*?(?:\{[^}]*?){3}(\n[^\n]*?\{.*?\})

将解决您的第二个请求。请注意,这种方式非常hackish,我认为它不会在所有情况下都有效。我推荐第一个,或者稍微修改一下这个。

至于它在 Sublime Test 2 中的崩溃,我不确定我是否能提供帮助——它对我有用!

于 2013-08-23T22:25:24.227 回答