删除多行文本区域中特定字符之后的所有行字符



假设我有一个多行文本区域,每行一个URL,我想删除每行上实际链接后的所有查询和标签,我该如何做到这一点?我想只是寻找一个"?",然后删除"?"以及它后面的所有内容。我需要遍历所有行并在没有查询的情况下输出 URL。

我发现这个脚本可以删除 ? 但我不确定如何使其与多行文本框一起使用。

源语言

<textarea>
https://www.amazon.com/gp/product/B076736W8H?pf_rd_p=c2945051-950f-485c-b4df-15aac5223b10&pf_rd_r=9WBS7FV4YHRG3SFC42GK
https://www.amazon.com/dp/B07FGG4SNM/ref=sspa_dk_detail_6?psc=1&pd_rd_i=B07FGG4SNM&pd_rd_w=LD3nX&pf_rd_p=21517efd-b385-405b-a405-9a37af61b5b4&pd_rd_wg=L6K9T&pf_rd_r=RZJNTFFGASGBYNA71403&pd_rd_r=8d24e9dc-1470-11e9-a15a-092e7e681a0e
<textarea/>

期望的输出

<textarea>
https://www.amazon.com/gp/product/B076736W8H
https://www.amazon.com/dp/B07FGG4SNM/ref=sspa_dk_detail_6
<textarea/>

我找到的脚本:

var s = '/Controller/Action';
var n = s.indexOf('?');
s = s.substring(0, n != -1 ? n : s.length);
document.write(s);

任何帮助不胜感激!这是我的第一个 Html/JS 小项目。

您可以使用全局正则表达式来匹配以 http 开头并包含?的行,并将整行仅替换为?前面的部分:

const textarea = document.querySelector('textarea');
textarea.value = textarea.value.replace(/^(http[^?]+)?.+$/gm, '$1');
textarea {
  width: 100%;
}
<textarea>
https://www.amazon.com/gp/product/B076736W8H?pf_rd_p=c2945051-950f-485c-b4df-15aac5223b10&pf_rd_r=9WBS7FV4YHRG3SFC42GK
https://www.amazon.com/dp/B07FGG4SNM/ref=sspa_dk_detail_6?psc=1&pd_rd_i=B07FGG4SNM&pd_rd_w=LD3nX&pf_rd_p=21517efd-b385-405b-a405-9a37af61b5b4&pd_rd_wg=L6K9T&pf_rd_r=RZJNTFFGASGBYNA71403&pd_rd_r=8d24e9dc-1470-11e9-a15a-092e7e681a0e
</textarea>

模式

^(http[^?]+)?.+$

方法:

  • ^ - 匹配字符串的开头
  • (http[^?]+) - 匹配并捕获包含以下内容的组
    • http[^?]+ - http ,后跟非?字符
  • ? - 匹配文字?
  • .+$ - 匹配行中的其余字符

并替换为$1,第一个被俘的组。

最新更新