正则表达式找不到其他模式之前的模式

时间:2014-08-23 12:42:50

标签: regex

我有以下文字:

text etxta #aaaaaa#bys1a asdasd
a#bbbbbbbys1a asdasd
test style="color: #cccccc"

我想要以下模式:/#[0-9a-fA-F]{6}/ color:前面没有可选的空格。

所以我从上面的例子中得到的结果是:

#aaaaaa
#bbbbbb

2 个答案:

答案 0 :(得分:1)

您可以使用负面的lookbehind(see demo):

(?<!color: ?)(#[0-9a-fA-F]{6})

但是请注意,如果:之后有多个空格或没有空格,则此版本不起作用。那是因为lookbehinds不能是可变长度的(在大多数实现中无论如何)。


如果您的正则表达式引擎不支持lookbehinds,则可以使用此表达式。这比lookbehind版本的优势在于它允许:之后的空白是可选的:

color:\s*#[a-z]{6}|(#[0-9a-fA-F]{6})

诀窍是我们在交替的左侧(|)匹配我们不想要的东西(即前面带有color:的十六进制代码,然后我们捕获我们的内容想要在右侧。请参阅this page以详细了解此匹配技术。

RegEx Demo

答案 1 :(得分:1)

根据您的RegEx语法判断我假设您正在使用JavaScript,在这种情况下,负面的后视组不可用。如果你想快速获得一系列匹配,我建议使用这种方法:

var str = 'text etxta #aaaaaa#bys1a asdasd' +
    'a#bbbbbbbys1a asdasd' +
    'test style="color: #cccccc"';

var result = str.match(/(color:\s*)?#[0-9a-fA-F]{6}/g)
    .filter(function (match) {
        return !match.startsWith("color:");
    });