2017-04-21 90 views
1

我想写下列要求一个正则表达式:正则表达式 - 第一个字符剥离

从文本块,得到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'); 
} 

如何获得第一个字符?

在此先感谢。

+0

请注意,根据您的要求,根据您的示例输入,事实上有5个匹配。 –

回答

2

您需要一个带负先行更换否定字符类:

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

regex demo

详细

  • url\( - 一个字符串url(
  • (?!data) - 下一对字符不应该是一个data
  • (.*?) - 捕获组1匹配任何0+字符比换行符字符其他尽可能少到第一
  • \) - )符号。
相关问题