正则表达式-转换网址并获得部分价值

时间:2018-08-29 08:14:45

标签: javascript regex

我有一个要转换的网址。我是这样的

JS:

var original_url;
var modified_url;

original_url = 'data/3458/3458-18-000003-index.html';
modified_url = original_url.replace( /(\d+-\d+-\d+-index.html)/, match => match.replace( /\D/g, '' ) + '/' + match.replace( '-index.html', '.txt' ) );

console.log(original_url);
console.log(modified_url);      

结果是:

控制台:

/data/3458/3458-18-000003-index.html
/data/3458/345818000003/3458-18-000003.txt

现在我还想从中获得部分价值。因此理想的结果应该是:

控制台:

/data/3458/3458-18-000003-index.html
/data/3458/345818000003/3458-18-000003.txt
345818000003

如何获得此附加值?

这里是一个小提琴:https://jsfiddle.net/jh7195ao/2/

1 个答案:

答案 0 :(得分:3)

您可以使用

var original_url;
var modified_url;
var add_value;

original_url = '/data/3458/3458-18-000003-index.html'; // '$2$3$4/$1.txt'
modified_url = original_url.replace(/((\d+)-(\d+)-(\d+))-index\.html/, function ($0,$1,$2,$3,$4) {
  add_value = $2+$3+$4;
  return $2+$3+$4+'/'+$1+'.txt';
});

console.log(original_url); // /data/3458/3458-18-000003-index.html
console.log(modified_url); // /data/3458/345818000003/3458-18-000003.txt
console.log(add_value);    // 345818000003

请注意,我在模式中添加了更多捕获组,以便稍后可以在回调方法中访问这些部分:

  • ((\d+)-(\d+)-(\d+))-第1组($1,以便以后删除其他替换)
    • (\d+)-第2组($2):一位或多位数字
    • --连字符
    • (\d+)-第3组($3):一位或多位数字
    • --连字符
    • (\d+)-第4组($4):一位或多位数字
  • -index\.html--index.html子字符串(请注意转义的.与文字点匹配)。