href属性末尾的文件名Regex(用文件名替换文件路径)



我正试图使用regex将文件路径仅替换为文件名,但很困难。

我列出了这样的文本列表:

xlink:href="file://C:xy & DRAWINGSz - CONTROLLEDa testsvg-A01.svg"

我只想输出

xlink:href="testsvg-A01.svg"

我可以使用单独的正则表达式(javascript(和几个正则表达式位来实现:

let inQuotes = hrefs[0].match(/"(.*?)"/gm);
inQuotes = inQuotes[0].match(/([^\]+$)/gm);
inQuotes = inQuotes[0].replace(/"/g, "");

这将只返回文件名,但我想知道是否有办法将其替换为所需的样式。

编辑:

我可以用这行代码一次性得到它:

let testHrefs = outText.match(/xlink:href="(.*?)"/gm)[0].match(/"(.*?)"/gm)[0].match(/([^\]+$)/gm)[0].replace(/^/, 'xlink:href="');

但它看起来很糟糕,并没有完全达到我想要的效果。有什么建议吗?

您可以使用正则表达式删除不想保留的文本(即href="和文件名之间的所有内容:

let href = 'xlink:href="file://C:\x\y & DRAWINGS\z - CONTROLLED\a \testsvg-A01.svg"';
console.log(href);
console.log(href.replace(/href=".*?([^\/]+)$/, 'href="$1'));

注意,如果您只想要简单地为[\]的Windows样式的文件名,我已经使用了[\/]来允许Unix和Windows样式文件名。

首先,请记住字符串中的反斜杠需要转义,因为反斜杠本身是转义字符。您可能希望以\的形式逃离这些。

完成此操作后,您可以使用正则表达式(?<=\)[^\]*:对进行积极的回顾

var xlink = "file://C:\x\y & DRAWINGS\z - CONTROLLED\a \testsvg-A01.svg";
var regex = /(?<=\)[^\]*/gm;
console.log(xlink.match(regex));

这会将字符串拆分到每个文件夹中(这本身可能很有用(,但如果您只需要文件名,则可以使用xlink.match(regex)[4](假设长度一致(,如果不一致,则使用xlink.match(regex)[xlink.match(regex).length - 1]

var xlink = "file://C:\x\y & DRAWINGS\z - CONTROLLED\a \testsvg-A01.svg";
var regex = /(?<=\)[^\]*/gm;
console.log(xlink.match(regex)[xlink.match(regex).length - 1]);

最新更新