正则表达式匹配文件名中的所有“ - ”分隔符,除了第一个和最后一个?

时间:2014-11-20 22:01:56

标签: regex

我一直试图写一个正则表达式来匹配所有" - "文件名中的分隔符除了第一个和最后一个,因此我可以将中间的所有数据组合成一个组,例如文件名,如:

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。感谢。

3 个答案:

答案 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)

感谢您的建议。

I got it to work this way

它用“!”替换第一个和最后一个“ - ”,这样我就可以用“ - ”对所有剩余的“ - ”进行简单的查找和替换,然后将所有“!”改回“ - ”