首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重复属性正则化简化

重复属性正则化简化
EN

Stack Overflow用户
提问于 2014-04-30 14:09:24
回答 3查看 752关注 0票数 3

我正在寻找代码库中的重复属性,我把一个可以工作的表达式放在一起,但是我想知道它是否可以变得更简单或者更符合逻辑。

样本输入

代码语言:javascript
运行
复制
test.append("<td class='no-order' style='text-align:center;' class=\"data text\">");

我的尝试

代码语言:javascript
运行
复制
<([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*)>

我的想法是寻找一个开始标记<,然后是任何不是结束标记[^>]*的东西,后面跟着一个带有'\"的类属性,然后重复整个过程。

正如你所看到的,即使它工作,它看起来相当长和复杂,他们是一个简单的方式吗?

编辑:

对于以替换all的形式编写它的人,超级奖励布朗尼点数,因此它在运行后组合了属性值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-30 14:15:46

您可以使用以下正则表达式:

代码语言:javascript
运行
复制
<.+(class)=("|').+?\2.+?\1.+>

在你使用它之前先逃掉它。

如果它是matches字符串,那么它包含副本。否则,就不会了。

解释:

<.+(class)=("|')匹配<加任何字符,直到到达class=单引号或双引号为止。

如果字符串再次使用反向引用包含,则其余的正则表达式只匹配值

票数 4
EN

Stack Overflow用户

发布于 2014-04-30 14:40:26

只需使用class=("|')检查多个类属性。

样本代码:

代码语言:javascript
运行
复制
    String str = "test.append(\"<td class='no-order' style='text-align:center;' class=\"data text\">\");";

    Pattern pattern = Pattern.compile("class=(\"|')");
    Matcher matcher = pattern.matcher(str);
    int index = 0;
    while (matcher.find()) {
        index++;
    }

    if (index > 1) {
        System.out.println("multiple class attribute found");
    }

产出:

代码语言:javascript
运行
复制
multiple class attribute found
票数 1
EN

Stack Overflow用户

发布于 2017-04-25 12:42:21

要在Amit建议的基础上构建,如果您想确保它位于您可以使用的相同元素中:

<.+(class)=("|').+?\2[^>]+?\1.+>

添加[^>]将确保您的第二个类属性驻留在相同的元素中,因为它将匹配除标记结束之外的任何内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23390436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档