正则表达式 - 剥离第一个字符

时间:2017-04-21 18:59:20

标签: regex

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

从一段文字中,获取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');
}

如何选择第一个字符?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您需要使用否定前瞻替换否定的字符类:

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

请参阅regex demo

<强>详情:

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