如何用破折号-替换字符串中的空格,但要避免空格后已经破折号

时间:2020-06-30 19:55:54

标签: javascript

我想更改项目的标题以在javascript中的url中显示,因为我需要将空格更改为破折号-但我的某些标题已经有了-因此,如果已经有则请避免破折号 例如 这是我的标题,是一个字符串

2008 - 2009 PEUGEOT

我想要这样

2008-2009-PEUGOT

4 个答案:

答案 0 :(得分:1)

string.replace(" - ", "-").replace(" ", "-")

首先将space-space的任何实例替换为-,然后将space的任何实例替换为-

答案 1 :(得分:1)

如果您需要一个更健壮的解决方案,尽管存在多少空白或有多少破折号,该解决方案仍然有效,您可以使用以下代码:

string.replace(/( *- *)+/g, '-').replace(/ +/g, '-');

这会将破折号与它们周围的任意空间匹配,并用破折号代替它们。

然后,它匹配所有剩余的空白,并用破折号代替。

工作示例

let strings = [
  '2008 - 2009 PEUGEOT',
  '2008     -   2009   PEUGEOT',
  '2008-    2009  -PEUGEOT',
  '2008   --  2009--  -    ---PEUGEOT',
  '2008 --   --- 2009 - -     ---- - PEUGEOT',
  '2008-2009-PEUGEOT'
];

strings.forEach(string => {
  const result = string.replace(/( *- *)+/g, '-').replace(/ +/g, '-');
  console.log(result);
});

编辑

我创建了多个其他解决方案,它们似乎以相对相同的速度工作。 可通过jsPerf 获得基准。

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

答案 2 :(得分:0)

使用正则表达式,它也可以处理-前面或后面的多个空格:

(?<!([-\s]))\s+(?!(\s*[-$]))

查找所有需要替换为-的空白 之后,您可以使用

删除所有其他空格
string.replace(" ", "")

答案 3 :(得分:0)

必须对所有字符串进行更改,上面的答案只是在第一个破折号和空格中进行替换

string.replace(/ - /g, "-").replace(/ /g , "-")

这对我有用

相关问题