首页 > 解决方案 > 正则表达式在字符串中查找动态子字符串

问题描述

我有一个包含标记的字符串。在标记内部有一个标识符/或子字符串,我想选择它看起来像这样

ghost://{schema_name}/{id} 

举个例子

 ghost://blogging/232323

注意:如果需要,我们可以将标识符更改为更容易在字符串中找到的标识符。

将其视为字符串

const somesting = `
<h1> Random Heading </h1> 
<p> Random Text </p> 
<p> a href="ghost://blogging/232323"> Text I want to pick </a> </p>
`

在这里,我想选择ghost://blogging/232323并将其更改为实际链接。

通过谷歌搜索,我发现我可以通过使用语法来实现这一点,但我不确定如何在这里(或任何其他方式)编写语法/正则表达式

如果有人可以帮助我,将不胜感激。

根据CertainPerformance的回答,我这样做了,但不幸的是这不起作用

const somesting = `
<h1> Random Heading </h1> 
<p> Random Text </p> 
<p> a href="ghost://xman-article/HPHvLTH06YUMfdMnokOl/spaceyfi-product-launch"> Text I want to pick </a> </p>
`;

const replaced = somesting.replace(
  /ghost:\/\/(\w+)\/(\d+)/g,
  (_, schema_name, id, slug) => `/${schema_name}/${id}/${slug}`
);

console.log(replaced)

标签: javascript

解决方案


您可以使用正则表达式来匹配ghost://,后跟单词字符(或架构名称允许的任何字符),然后是另一个斜杠和数字。这是一个如何动态替换它的示例a href="https://blogging.com/article/232323"

const somesting = `
<h1> Random Heading </h1> 
<p> Random Text </p> 
<p> a href="ghost://blogging/232323"> Text I want to pick </a> </p>
`;

const replaced = somesting.replace(
  /ghost:\/\/(\w+)\/(\d+)/g,
  (_, schema_name, id) => `https://${schema_name}.com/article/${id}`
);
console.log(replaced);

模式名称和 id 是回调中的变量.replace,因此您可以随意使用它们,但您需要在那里,并在回调结束时返回要替换的字符串。

如果您有需要捕获的第三部分ghost,则创建第三个捕获组,以便.replace回调的第四个参数可以看到它:

const somesting = `
<h1> Random Heading </h1> 
<p> Random Text </p> 
<p> a href="ghost://xman-article/HPHvLTH06YUMfdMnokOl/spaceyfi-product-launch"> Text I want to pick </a> </p>
`;

const replaced = somesting.replace(
  /ghost:\/\/([^/]+)\/([^/]+)\/([^"])/g,
  (_, schema_name, id, slug) => `/${schema_name}/${id}/${slug}`
);

console.log(replaced)


推荐阅读