我正试图使用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]);