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?的主要内容,如果未能解决你的问题,请参考以下文章

javascript 删除文本空间#js #regex

javascript 删除符号#js #regex

javascript 删除文本空间#js #regex

javascript JS + REGEX:删除重复的行

javascript 删除所有特殊字符包括空格#regex #js

javascript 删除所有特殊字符包括空格#regex #js