我一直试图写一个正则表达式来匹配所有" - "文件名中的分隔符除了第一个和最后一个,因此我可以将中间的所有数据组合成一个组,例如文件名,如:
Ann M Martin - Baby sitters Club - Baby sitters Little Sister - Super Special 04 - Karen, Hannie and Nancy - The Three Musketeers.doc
必须成为:
Ann M Martin - Baby sitters Club- Baby sitters Little Sister- Super Special 04- Karen, Hannie and Nancy - The Three Musketeers.doc
所以基本上我试图取代" - "用" - "但不是第一个或最后一个实例。文件名可以有1到6" - " deiminators,但应该只影响3,4,5或6" - " deliminators。
用于File Renamer。味道是JavaScript。感谢。
答案 0 :(得分:1)
你能不使用正则表达式吗?如果是这样的话:
var s = "Ann M Martin - Baby sitters Club - Baby sitters Little Sister - Super Special 04 - Karen, Hannie and Nancy - The Three Musketeers.doc";
var p = s.split(' - ');
var r = ''; // result output
var i = 0;
p.forEach(function(e){
switch(i) {
case 0: r += e; break;
case 1: case p.length - 1: r += ' - ' + e; break;
default: r += '- ' + e;
}
i++;
});
console.log(r);
http://jsfiddle.net/c7zcp8z6/1/
s=Ann M Martin - Baby sitters Club - Baby sitters Little Sister - Super Special 04 - Karen, Hannie and Nancy - The Three Musketeers.doc
r=Ann M Martin - Baby sitters Club- Baby sitters Little Sister- Super Special 04- Karen, Hannie and Nancy - The Three Musketeers.doc
这假设分隔符始终为-
(1个空格,1个破折号,1个空格)。如果没有,则需要仅在-
上拆分,然后在重建之前修剪每个标记。
答案 1 :(得分:0)
两个选项:
1 - 您需要使用
迭代匹配来自行处理( - )
并构建一个新字符串(有关获取匹配索引,请参阅this post)。
您必须检查匹配计数是否大于2并跳过第一个和最后一个匹配。
2 - 使用
.+ - ((?:.+ - )+).+ - .+
获取要修改的字符串部分,然后对破折号进行替换,然后构建字符串(再次使用上述正则表达式中的索引)。
答案 2 :(得分:0)
感谢您的建议。
它用“!”替换第一个和最后一个“ - ”,这样我就可以用“ - ”对所有剩余的“ - ”进行简单的查找和替换,然后将所有“!”改回“ - ”