【问题标题】:Regex - First character stripped正则表达式 - 第一个字符被剥离
【发布时间】:2017-04-21 18:59:20
【问题描述】:

我正在尝试编写具有以下要求的正则表达式:

从文本块中,获取url(...)的内部文本。
如果内部文本以data 开头,则应忽略它。

下面的正则表达式似乎有效,唯一的问题是它删除了结果的第一个字母。

预期结果:

../public/fonts/glyphicons-halflings-regular.eot
https://public/fonts/glyphicons-halflings-regular.eot
../public/fonts/glyphicons-halflings-regular.ttf
../public/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular

实际结果(缺少第一个字符):

./public/fonts/glyphicons-halflings-regular.eot
ttps://public/fonts/glyphicons-halflings-regular.eot
./public/fonts/glyphicons-halflings-regular.ttf
./public/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular

正则表达式

(?s)url\([^data:](.*?)\);?

文字

src: url(../public/fonts/glyphicons-halflings-regular.eot);
src: url(https://public/fonts/glyphicons-halflings-regular.eot);
src: url(../public/fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(data:application/font-woff;base64,bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArICIuL2Rpc3QvYXNzZXRzL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZjIiOw==) format('woff2'),url(data:application/font-woff;base64,bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArICIuL2Rpc3QvYXNzZXRzL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZiI7) format('woff'),url(../public/fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../public/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg');
}

如何选择第一个字符?

提前致谢。

【问题讨论】:

  • 请注意,acc。根据您的要求,给定您的示例输入,实际上有 5 个匹配项。

标签: regex


【解决方案1】:

您需要将否定字符类替换为负前瞻:

url\((?!data)(.*?)\)
      ^^^^^^

regex demo

详情

  • url\( - 文字字符串 url(
  • (?!data) - 字符的下一个不应是 data 子字符串
  • (.*?) - 捕获组 1 匹配除换行符以外的任何 0+ 字符,尽可能少到第一个
  • \) - ) 符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2012-04-20
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多