【问题标题】:Regex: Negative lookahead after list match正则表达式:列表匹配后的负前瞻
【发布时间】:2015-08-22 22:13:23
【问题描述】:

考虑以下输入字符串(css 文件的一部分):

url('data:image/png;base64,iVBORw0KGgoAAAAN...');
url(example.png);

目标是使用正则表达式获取 url 部分并对其进行处理。所以第一部分很简单:

url\(['"]?(.+?)['"]?\)

基本上,它从url(...) 内部获取带有可选引号符号的内容。使用这个正则表达式我得到以下匹配:

data:image/png;base64,iVBORw0KGgoAAAAN...
example.png

到目前为止一切顺利。现在我想排除在其文本中包含“数据:图像”的网址。我认为负前瞻是合适的工具,但像这样使用它:

url\(['"]?(?!data:image)(.+?)['"]?\)

为第一个 url 提供以下结果:

'data:image/png;base64,iVBORw0KGgoAAAAN...

不仅不排除这个匹配,而且匹配的字符串本身现在在开头包含引号字符。如果我像这样使用+ 而不是第一个?

url\(['"]+(?!data:image)(.+?)['"]?\)

它按预期工作,url 不匹配。但这不允许在 url 中使用可选引号(因为 + 是 1 或更多)。我应该如何更改正则表达式以排除给定的 url?

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以像这样使用负前瞻:

    url\((['"]?)((?:(?!data:image).)+?)\1?\)
    

    RegEx Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 2010-12-17
      相关资源
      最近更新 更多