【问题标题】:How to convert link in copy block to html links如何将复制块中的链接转换为html链接
【发布时间】:2020-02-14 18:04:21
【问题描述】:

我有一个包含大约 156 个网站链接的 HTML 代码块。如何将链接转换为 HTML 链接?

https://siteA.com/xyA.
https://siteB.com/xyB.
https://siteC.com/xyC.
https://siteD.com/xyD.

我想将以上链接转换为:

<a href="https://siteA.com/xyA" target="_blank">https://siteA.com/xyA</a>
<a href="https://siteB.com/xyB" target="_blank">https://siteB.com/xyB</a>
<a href="https://siteC.com/xyC" target="_blank">https://siteC.com/xyC</a>
<a href="https://siteD.com/xyD" target="_blank">https://siteD.com/xyD</a>

每个链接中唯一的共同点是“https://”开头和句点“.”。在末尾。我希望在提出解决方案时,我们可以将它们用作标识符。

fyi:我没有玩过正则表达式。我使用 Visual Studio Code 和 Notepad++ 作为我的 IDE

感谢任何潜在客户。

发送

【问题讨论】:

  • 你用什么语言来做这个?
  • @Evert 如上所述,他在 Visual Studio Code 和 Notepad++ 中执行此操作!
  • 在通过脚本运行正则表达式时,我所依赖的另一件事是某些 url 中有多个句点。喜欢siteD.com/xyD.abc.efg。或 siteD.com/xyD.abc.efg.yyy-y.pqr url 中的 peiords 可以在 1 到 4 之间的任何位置。那是几个脚本没有抓取完整的 url。

标签: html regex hyperlink


【解决方案1】:

(https:\/\/.*?\..*?)\. 应使用您使用的任何工具替换为 &lt;a href="$1" target="_blank"&gt;$1&lt;/a&gt;

解释:

https:\/\/ 应该清楚,因为它是字面意思!

.*?\..*?\. 将匹配您的域名和任何内容,直到第二个文字 .

整个表达式将放在括号中以将域名捕获为一个组并在第二个正则表达式中替换。

【讨论】:

  • @csabinho。在查找中,"(https:\/\/.*?\..*?)\."它似乎找到了 url 的所有引用,但是当我用“\1”替换它时,它没有显示提取的值。我只是按原样显示替换的字符串。 \1 的替换字符串基本相同
【解决方案2】:

如果您在 vscode 中按Ctrl+H 将打开查找和替换面板,请在查找输入中输入(.*)\.,启用正则表达式切换,然后在替换输入中输入&lt;a href="$1" target="_blank"&gt;$1&lt;/a&gt;。应该可以一次性全部替换掉​​。

(.*)\. 正则表达式采用以句点结尾的行中的任何内容,并将 url(不带句点)放入捕获组。在替换中,我们使用$1 将捕获组插入回替换文本中。

【讨论】:

  • 这会因为域名中的点而失败!
  • 我意识到它通过了,因为.*很贪心!
  • @csabinho 是的,但是编辑器中简单字符串替换的性能并不是很重要,所以保持简单在 IMO 中更重要。不过,在必要的时候,本应投入生产的东西不应该那么贪婪
  • 当然。用过于复杂的regexes 来混淆人们是没有意义的!
【解决方案3】:

我是开发新手,这是我的第一个答案。我不明白你所说的使用“https://”和“。”是什么意思。作为标识符?所以我所做的基本上是假设你的 .html 页面上有一个代码块:

    <code id="codeBlock">
     https://siteA.com/xyA.
     https://siteB.com/xyB.
     https://siteC.com/xyC.
     https://siteD.com/xyD.
    </code>
    <div id="linkOutput"></div>

JavaScript 文件拆分代码块的内容,删除空格等所有内容,然后创建所需的链接标记并将它们显示回 HTML 文件(我做了更多以表明代码有效)。

//get data from the HTML <code> block
//filter out whitespace
var data = [];
data = document
    .getElementById("codeBlock")
    .innerHTML.split(/\s+/)
    .filter(e => e.length > 1);

for (var i = 0; i < data.length; i++) {
    //create <a> tag and set attributes
    var para = document.createElement("a");
    para.setAttribute("href", data[i]);
    para.setAttribute("target", "_blank");
    var node = document.createTextNode(data[i]);
    para.appendChild(node);
    //append it to HTML front end
    document.getElementById("linkOutput").appendChild(para);
}

/*
got some inspiration here:
https://blog.abelotech.com/posts/split-string-into-tokens-javascript/
https://www.w3schools.com/js/js_htmldom_nodes.asp
*/

希望这会有所帮助!

【讨论】:

  • 原发帖人正在寻找正则表达式的解决方案,因为这可以在搜索中使用。
猜你喜欢
  • 1970-01-01
  • 2018-03-30
  • 2015-04-22
  • 2013-07-20
  • 2010-09-07
  • 2013-03-30
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
相关资源
最近更新 更多