我有以下文字:
text etxta #aaaaaa#bys1a asdasd
a#bbbbbbbys1a asdasd
test style="color: #cccccc"
我想要以下模式:/#[0-9a-fA-F]{6}/
color:
前面没有可选的空格。
所以我从上面的例子中得到的结果是:
#aaaaaa
#bbbbbb
答案 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以详细了解此匹配技术。
答案 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:");
});