提问
我想匹配 下面这些内容里 url() 括号内assets开始的内容,但是要剔除里面的单引号和双引号
url(./../../assets/xxxxx)
url('./../../assets/xxxxx')
url("./../../assets/xxxxx")
url(./assets/xxxxx)
url('../assets/xxxxx')
url("assets/xxxxx")
回答
好的,我明白了。你想要匹配 url() 括号内以 assets 开始的内容,但是要剔除里面的单引号和双引号。一个可能的正则表达式是:
url\((['"]?)(.*?assets[^'")]+)\1\)
这个正则表达式的意思是:
url\(
匹配字母 url 和左括号,左括号需要转义,因为它是一个特殊字符。(['"]?)
匹配一个可选的单引号或双引号,并且捕获它作为第一个分组,分组用括号表示。(.*?assets[^'")]+)
匹配任意数量的任意字符,直到遇到 assets,然后匹配一个或多个非单引号、双引号或右括号的字符,并且捕获它作为第二个分组,这就是我们想要的 url 的内容。\1
匹配第一个分组捕获的内容,也就是单引号或双引号,如果有的话。这样可以确保左右引号是一致的。\)
匹配右括号,需要转义。你可以用这个网站来测试你的正则表达式:https://regex101.com/
第二问
上面的结果有点问题,我并不想要assets之前的内容
回答
抱歉,我可能理解错了你的需求。如果你只想要 assets 之后的内容,你可以用这个正则表达式:
url\((['"]?).*?(assets[^'")]+)\1\)
这个正则表达式的意思是:
url\(
匹配字母 url 和左括号,左括号需要转义,因为它是一个特殊字符。(['"]?)
匹配一个可选的单引号或双引号,并且捕获它作为第一个分组,分组用括号表示。.*?
匹配任意数量的任意字符,但是尽量少匹配,这样可以跳过 assets 之前的内容。(assets[^'")]+)
匹配字母 assets 和一个或多个非单引号、双引号或右括号的字符,并且捕获它作为第二个分组,这就是我们想要的 url 的内容。\1
匹配第一个分组捕获的内容,也就是单引号或双引号,如果有的话。这样可以确保左右引号是一致的。\)
匹配右括号,需要转义。你可以用这个网站来测试你的正则表达式:https://regex101.com/