删除多行文本区域中特定字符后的所有字符
Remove all characters on line after a specific character in multiline textarea
假设我有一个多行文本区域,每行一个 URL,我想删除每行实际 link 之后的所有查询和标记,我该如何实现?我只想找一个“?”只是擦除“?”连同它之后的所有内容。我需要遍历所有行并输出没有查询的 URLS。
我发现这个脚本可以删除 ?但我不确定如何让它与多行文本框一起使用。
原创
<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, '');
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
,后跟非?
字符
\?
- 匹配文字 ?
.+$
- 匹配行中的其余字符
并替换为第一个捕获的组
。
假设我有一个多行文本区域,每行一个 URL,我想删除每行实际 link 之后的所有查询和标记,我该如何实现?我只想找一个“?”只是擦除“?”连同它之后的所有内容。我需要遍历所有行并输出没有查询的 URLS。
我发现这个脚本可以删除 ?但我不确定如何让它与多行文本框一起使用。
原创
<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, '');
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
,后跟非?
字符
\?
- 匹配文字?
.+$
- 匹配行中的其余字符
并替换为第一个捕获的组。