正则表达式:动态替换搜索到的单词

时间:2019-03-08 21:47:58

标签: javascript regex

我想用github链接之类的另一个词来代替file:///Downloads/project

const string = 'file:///Downloads/project/users/controllers/users/controller.js';

我尝试使用.reworld by world替换一个世界,但遇到一个问题,file:///Downloads/project是一个动态值,可能会不时更改。

string.replace(/file\:\/\/Downloads\/project\/users\/controller.js/gi, 'https://gitlab.com')

因此,我想搜索单词project,并用其他路径或单词向后替换该单词

4 个答案:

答案 0 :(得分:1)

要获得预期的结果,请使用以下使用indexOf和substr的选项,最后使用gitlab url替换

  1. 获取项目索引
  2. 获取从0到项目索引的字符串
  3. 使用替换选项将第2步中的字符串替换为gitlab

const string = 'file:///Downloads/project/users/controllers/users/controller.js';
const index = string.indexOf('project') 
console.log(string.replace(string.substr(0, index), 'https://gitlab.com/'))

codepen-https://codepen.io/nagasai/pen/qvjdEa?editors=1010

答案 1 :(得分:1)

使用正则表达式,您可以匹配包含/project的第一个组,并用https://gitlab.com替换第一个带括号的捕获组。这里的p1代表第一个带括号的捕获组,p2代表第二个带括号的捕获组。

const str = 'file:///Downloads/project/users/controllers/users/controller.js';

const res = str.replace(/^(.|\/)+\w*project(.+)*/gi, function(match, p1, p2) {
  return 'https://gitlab.com' + p2;
});

console.log(res);

答案 2 :(得分:0)

您不需要正则表达式

const string = 'file:///Downloads/project/users/controllers/users/controller.js',
  yourValue = "file:///Downloads/project/",
  res = string.replace(yourValue, "https://gitlab.com/")

console.log(res)

答案 3 :(得分:0)

'https://gitlab.com/' + string.substr(string.indexOf('project'))

首先在字符串中找到“项目”的位置

string.indexOf('project')

然后从该位置到字符串的末尾获取一个子字符串(substr直到没有第二个arg的末尾为止)

string.substring(indexOfProject)

然后用'+'组合起来。请注意,该网址以“ /”结尾,因为您的字符串将以“ p”开头。

'https://gitlab.com/' + extractedString