使用下面的正则表达式,我可以从CSS中提取路径,但结果还包括“#”和“?”之后的位。有什么办法可以提取路径吗
正则表达式
url\([\s]?[\"|\']?(.*?)[\"|\']?[\s]?\)
串
url('../fonts/Google_OpenSans/open-sans-v15-latin-italic.eot?#iefix') format('embedded-opentype')
url('../fonts/Google_OpenSans/open-sans-v15-latin-italic.woff2') format('woff2')
url('../fonts/Google_OpenSans/open-sans-v15-latin-italic.woff') format('woff')
url('../fonts/Google_OpenSans/open-sans-v15-latin-italic.ttf') format('truetype')
url('../fonts/Google_OpenSans/open-sans-v15-latin-italic.svg#OpenSans') format('svg')
预期
../fonts/Google_OpenSans/open-sans-v15-latin-italic.eot
实际
../fonts/Google_OpenSans/open-sans-v15-latin-italic.eot?#iefix
最佳答案
您可以使用
url\(\s*(["']?)([^()?#]*)(?:[#?].*?)?\1\s*\)
请参见regex demo。结果将在第2组中。
细节
url\(
-url(
子字符串\s*
-0+空格(["']?)
-组1:可选的'
或"
([^()?#]*)
-组2:?
,#
,)
和(
以外的任何0+个字符(?:[#?].*?)?
-一个可选的子字符串,以?
或#
开头,然后具有除换行符以外的任何0+字符,并且尽可能少(要使其更加有效,请在此处将.*?
替换为[^()]*
,请参见this demo)\1
-与第1组中捕获的值相同\s*
-0+空格\)
-一个)
字符。关于php - 从CSS中仅提取路径,并在路径后排除任何内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53478189/