New Bing 帮我写正则

发布时间 2023-03-29 17:30:05作者: 土豆赛叩

提问

我想匹配 下面这些内容里 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/

测试结果

image