javascript使用正则表达式或其他方式替换dash char

时间:2012-05-18 13:26:46

标签: javascript regex

我有这个:

11111-22222-333---444---55--5566--6-----7-

我正在使用此代码:

overlaps.replace(/-{2}/g, '-');

然而它不起作用,我想要的是-的多个实例应替换为一个-,如果有的话,应删除结尾短划线。

有人可以说出我做错了吗?

4 个答案:

答案 0 :(得分:4)

无需使用两个正则表达式。这应该可以正常工作。

overlaps.replace(/-+$|(-)+/g, '$1')

http://jsfiddle.net/wJLTB/3/

答案 1 :(得分:1)

您可以使用:

overlaps.replace(/-+/g, "-").replace(/-$/, "");

DEMO: http://jsfiddle.net/wJLTB/1/

另一种方法是使用回调函数:

overlaps.replace(/-+/g, function(str, p1, offset) {
    return offset.lastIndexOf("-") == p1 ? "" : "-";
})

DEMO: http://jsfiddle.net/wJLTB/2/

答案 2 :(得分:1)

关闭但忘记了最终条件:

  如果有的话,应该删除

和结束破折号。

所以请改用:

overlaps.replace(/-+/g, "-").replace(/-+$/, "");

答案 3 :(得分:0)

对我来说这看起来更干净:

overlaps.replace(/-(?=-|$)/g, '')

expr读取:删除破折号后跟另一个破折号或输入结束。