我正在尝试编写具有以下要求的正则表达式:
从一段文字中,获取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 :(得分:2)
您需要使用否定前瞻替换否定的字符类:
url\((?!data)(.*?)\)
^^^^^^
请参阅regex demo
<强>详情:
url\(
- 文字字符串url(
(?!data)
- 字符的下一个不应该是data
子字符串(.*?)
- 捕获第1组匹配除了换行符以外的任何0 +字符,尽可能少到第一个\)
- )
符号。