JS RegEx 删除部分 URL?
Posted
技术标签:
【中文标题】JS RegEx 删除部分 URL?【英文标题】:JS RegEx to remove part of a URL? 【发布时间】:2019-12-21 19:38:41 【问题描述】:我正在使用 GoogleBooks API 按名称搜索特定标题并检索封面图片 URL。例如,搜索“了不起的盖茨比”将返回以下图片链接:
http://books.google.com/books/content?id=HestSXO362YC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api
如果你看下图,你可以看到右下角有一个小折痕。一些图像 URL 会折叠,而另一些则不会。如果您从 URL 链接中删除 edge=curl
,则会删除折叠。
有没有办法使用正则表达式来查找和删除卷曲部分?
此外,有没有办法使用正则表达式将img=1
值更改为img=2
?
【问题讨论】:
【参考方案1】:您可以使用 .replace() 方法
let URL = "some random URL you have"
console.log(URL.replace('&edge=curl',''))
将替换它在此字符串中找到的每个 "&edge=curl" 并将其替换为 '' 一个基本上将其删除的空字符串。
您也可以使用相同的方法 .replace() 替换任何静态 URL 变量,例如 "img=1"
console.log(URL.replace('img=1','img=2'))
【讨论】:
谢谢。对这一切都超级陌生,回想起来这一点非常明显。欣赏它。 您能否将此答案标记为正确或投赞成票以帮助该问题的未来观众 需要注意的是,这依赖于img
的值在更新之前已知,这在某些情况下可能会很棘手。无论输入字符串中的值如何,这种方法都会更新参数:***.com/questions/59439323/…【参考方案2】:
不要使用正则表达式来解析 URL。使用URL
对象:
var u = new URL("http://books.google.com/books/content?id=HestSXO362YC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api");
u.searchParams.delete("edge");
u.searchParams.set("img", "2");
console.log(u.href);
【讨论】:
【参考方案3】:要获取更新后的 url,其中 &edge=curl
模式被替换并更新了 &img=
和 &zoom=
参数,您可以通过链接多个 .replace()
调用来实现此目的,如下所示:
const url = "http://books.google.com/books/content?id=HestSXO362YC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api"
// New values for img and zoom parameters
const img = 300;
const zoom = 22;
console.log(
url
.replace(/&img=(\w+)/,`&img=$img`)
.replace(/&zoom=\w+/,`&zoom=$zoom`)
.replace(/&edge=curl/,"")
)
此处&img=
和&zoom=
参数使用正则表达式&img=\w+
和&zoom=\w+
进行更新,其中\w+
将匹配出现在参数之后的一个或多个字母数字字符。
这种方法的优点(通过显式指定 img=1
并将其替换为 img=2
)是您可以更新输入 url 的那些参数/值子字符串,而无需在替换之前知道这些参数的实际值(即img
的值为1
)。
请注意,此方法假定要更新的参数以 &
为前缀(而不是 ?
)。
希望有帮助!
【讨论】:
如果 img 是第一个查询字符串参数,例如/content?img=asdf&id=fdsa
?
编辑使情况变得更糟,它将匹配?ximg=123
!你可以测试(?|&)img=[^&]*
【参考方案4】:
试试这个
let url = 'http://books.google.com/books/content?id=HestSXO362YC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api';
// remove &edge=curl
url = url.replace('&edge=curl', '');
// replace img=1 with img=2
url = url.replace('img=1', 'img=2');
【讨论】:
以上是关于JS RegEx 删除部分 URL?的主要内容,如果未能解决你的问题,请参考以下文章