0

正则表达式让我很困惑,所以让我在这里提供一个例子,希望有人能帮助我。

我正在构建一组图标,css 看起来像这样。

.icon-download:before {
  content: "\f01a";
}
.icon-upload:before {
  content: "\f01b";
}
.icon-inbox:before {
  content: "\f01c";
}
.icon-play-circle:before {
  content: "\f01d";
}

显然还有更多图标,但我需要获取图标名称,而不是遍历每个图标并删除它,我想使用正则表达式擦除.icon-保留图标名称,然后从头到尾:before擦除}

我读到了正则表达式,但有很多不同的答案和问题,替换特殊字符和数值 1-10 和字母 az 的一般方法是什么。

因此.icon-,用空白替换会很容易,:before { content:"\但随机数会变得很棘手。

所以我的问题是我想要实现的最佳语法是什么?

4

5 回答 5

2

这取决于您将在哪里使用 RegEx。什么语言,什么程序等。据我了解,您要删除.icon-,保留图标名称,然后删除其余部分?

这是一个(简约的)正则表达式,可用于 Notepad++ 以查找和替换您想要的方式:

找什么:\.icon-|:before \{\r\n.+\r\n\}

用。。。来代替:

输出:

download
upload
inbox
play-circle
于 2013-10-10T02:52:36.727 回答
1

你说你想建立一个数组。因此无需替换或擦除。只需提取图标名称。

在 php 中你可以这样做:

$css = readfile( ... ); // get css as a string
preg_match_all ('/icon-([-a-z]+):/', $css, $matches);
$result = $matches[1];

您肯定想阅读 php 手册中的正则表达式文档: http ://www.php.net/manual/fr/book.pcre.php 。它完整​​且易于遵循。

于 2013-10-10T03:02:58.467 回答
1
".icon-download:before { content: \"\f01a\";}".replace(/\.icon\-(.*?):before {.*?}/, "$1")

我不编写 Javascript 代码,但上面的代码似乎可以工作,并且可能会给您一些提示。请注意,您必须转义原始字符串中的双引号。您正在寻找的具体技术是back-reference

我从这篇文章中得到了灵感。

于 2013-10-10T02:43:56.447 回答
0

最简单的形式我很快就想到了 JavaScript。

    // add more matches here
var pattern = /(\.icon\-(download|inbox|play\-circle))/g;

var m;

var text = '.icon-download:before {'+
                'content: "\f01a";'+
        '}'+
        '.icon-upload:before {'+
        '  content: "\f01b";'+
        '}'+
        '.icon-inbox:before {'+
        '  content: "\f01c";'+
        '}'+
        '.icon-play-circle:before {'+
        '  content: "\f01d";'+
        '}';

var reg = new RegExp(pattern);

while((m = reg.exec(text)) != null){
   alert(m[0]); 
}
于 2013-10-10T03:01:52.823 回答
0
/.icon-([a-z-]*):before {[^\}]*}/gm

使用此模式,您可以遍历 CSS 文件中的所有图标名称。通过修改[a-z-]部分,您可以定义这些名称可以包含的字符。在我的示例中,我使用了atoz和破折号 ( -)。

Java代码示例:

public static ArrayList<String> parseIconNames(String css) {
    ArrayList<String> names = new ArrayList<String>();

    Pattern pattern = Pattern.compile(".icon-([a-z-]*):before {[^\\}]*}", Pattern.MULTILINE);
    Matcher matcher = pattern.matcher(css);

    while(matcher.find()) {
        names.add(matcher.group(1));
    }

    return names;
}
于 2016-03-15T10:51:33.727 回答