如何防止这个用空格替换连字符的正则表达式也用其他连字符替换连字符?

时间:2010-12-01 19:23:35

标签: javascript regex

这个正则表达式:

str.replace(/ +/g, '-').toLowerCase();

将转换为:

The dog jumped over the lazy - chair

进入这个:

the-dog-jumped-over-the-lazy---chair

如何修改它以便它产生它(只有一个连字符):

the-dog-jumped-over-the-lazy-chair

2 个答案:

答案 0 :(得分:1)

我认为你的实际输入是“狗跳过懒惰的椅子”,连字符周围的空格被转换,因为没有其他原因,模式应该与那里匹配。

试试这个:

str.replace(/( +- *)|(- +)|( +)/g, '-').toLowerCase();

显式检查连字符两侧的空格字符串(第一个模式也设计为消耗尾随空格),在该过程中仅使用一个连字符。如果一个连字符已经存在,并且空格包围,则该连字符包含在匹配中,因此当写连字符时,它只是一个“替换”;在这种情况下,只删除空格,并且替换操作重新创建连字符,因为它是作为表达式的一部分捕获的。

答案 1 :(得分:0)

在正则表达式中包含连字符。

str.replace(/[ -]+/g, '-').toLowerCase();