javascript - 如何通过从旧字符串中删除与正则表达式不匹配的任何内容来创建新字符串(在 JavaScript 中)
问题描述
我有一个用于匹配输入中的 IMDB ID 的正则表达式,就像这样
const reg = /(tt[0-9]{7,8})/
输入可以是来自 IMDB 的任何链接,例如
https://www.imdb.com/title/tt0468569/?pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=e31d89dd-322d-4646-8962-327b42fe94b1&pf_rd_r=2K0PR4FAVS54AC50131G&pf_rd_s=center-1&pf_rd_t=15506&pf_rd_i=top&ref_=chttp_tt_4
我想要做的是从这个输入中创建一个新字符串,只留下 ID。
所以预期的输出是tt0468569
我只能找到如何删除与正则表达式匹配的所有内容的示例,这与我所需要的相反。
我想要类似的东西
const reg = /(tt[0-9]{7,8})/
var input = "https://www.imdb.com/title/tt0468569/?pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=e31d89dd-322d-4646-8962-327b42fe94b1&pf_rd_r=2K0PR4FAVS54AC50131G&pf_rd_s=center-1&pf_rd_t=15506&pf_rd_i=top&ref_=chttp_tt_4"
var result = input.replace(!reg, '')
console.log(result)
任何帮助,将不胜感激
解决方案
这会做:
是\d
一个数字。您可以选择\d{7,8}
or \d+
which 表示 1 或更多,也可以使用\d{7,}
to 表示 7 或更多。
const s = "https://www.imdb.com/title/tt0468569/?pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=e31d89dd-322d-4646-8962-327b42fe94b1&pf_rd_r=2K0PR4FAVS54AC50131G&pf_rd_s=center-1&pf_rd_t=15506&pf_rd_i=top&ref_=chttp_tt_4"
console.log(s.match(/tt\d{7,8}/)[0]);
而且我们还可以防范未找到的情况:
const s = "https://www.imdb.com/title/tt0468569/?pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=e31d89dd-322d-4646-8962-327b42fe94b1&pf_rd_r=2K0PR4FAVS54AC50131G&pf_rd_s=center-1&pf_rd_t=15506&pf_rd_i=top&ref_=chttp_tt_4"
// to guard against "not found":
const matches = s.match(/tt\d{7,8}/);
const id = matches && matches[0];
console.log(id);
// Example when "not found"
const matches2 = s.match(/tt\d{20}/);
const id2 = matches2 && matches2[0];
console.log(id2);
的部分matches && matches[0]
,它意味着如果matches
是真的(一个数组是真的),然后评估第二部分并取它的值。但是当没有匹配时,则matches
isnull
和是 falsy,然后&&
将不会继续,而只是将 thenull
作为值。
您正在尝试匹配某些东西,因此您可能不会使用replace()
,但如果您这样做,它是:
const s = "https://www.imdb.com/title/tt0468569/?pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=e31d89dd-322d-4646-8962-327b42fe94b1&pf_rd_r=2K0PR4FAVS54AC50131G&pf_rd_s=center-1&pf_rd_t=15506&pf_rd_i=top&ref_=chttp_tt_4"
console.log(s.replace(/.*?(tt\d{7,8}).*/, '$1'));
表示任意数量的.*?
字符且非贪婪,以便匹配第一次出现的tt_______
. 如果是.*
,那是贪婪的,并且括号中的模式可以匹配第二次或最后一次出现的 ,tt_______
如果它存在的话。所以基本上匹配该模式并替换为第一个带括号的匹配。
推荐阅读
- .htaccess - .htaccess RewriteRule 两个地址之间的哈希值
- .net-core - 将 .netstandard2.0 NuGet 与 .NetFramework4.6.2 一起使用
- azure - ARM 模板部署中缺少 Azure Web 应用暂存槽应用设置
- xamarin.forms - 在 xamarin.forms 中对此视图进行编码的最佳解决方案是什么?
- git - 如何在 git repo 中找到与 clearcase/cleartool 中的私有文件等效的私有文件?
- html - 可滚动表格内的 CSS 绝对定位
- javascript - 有没有办法将文本和图像包装到一个复选框元素中?
- c# - 使用 Linq C# 进行类搜索或更新的嵌套列表
- powershell - Powershell 从 Visual Basic 脚本中获取返回值
- php - 我通过 sql 从数据库中获取所有值