使用空格混合结果,并在Javascript中添加短划线?

时间:2018-05-28 03:45:08

标签: javascript regex

如何将消除空格和特殊字符与只有一个' - '字符? 这里有一点背景: 当我的公司将职业发布到我的职业部门时,ATS将为该职位转换职称,例如,如果职位是: 奥林匹亚,华盛顿:SLP全部或兼职它将变为 olympia-wa-slp-full-or-part-time

我已经尝试过其他类似的问题,但只是接近这段代码:

function newTitle(str) {
var x = str.replace(/[\W]/g, '-').toLowerCase();
return x;

现在如果我运行它,产生的输出是 olympia - wa - slp-full-or-part-time (从额外的空格中有两个破折号)。我不对的是什么?

我已尝试过以下其他内容:

str.replace(/\s+/g, ''); 

str.replaceAll("[^a-zA-Z]+", " ");

但两者都没有接近所需的格式。

谢谢!

3 个答案:

答案 0 :(得分:0)

您的第一个示例非常接近,只需在+之后添加[\W]即可匹配一个或多个非字字符。您也可以在Regexr

中试一试

function newTitle(str) {
  var x = str.replace(/[\W]+/g, '-').toLowerCase();
  return x;
}

alert(newTitle('Olympia, WA: SLP Full or Part Time'));

答案 1 :(得分:0)

您真正想要的是从字符串创建slug 这是一个很好的可重用函数,它也可以处理多个破折号:



function slugify(s) {
  s = s.replace(/[^\w\s-]/g, '').trim().toLowerCase();
  s = s.replace(/[-\s]+/g, '-');
  return s;
}

console.log(
  slugify("Olympia, WA: SLP Full or Part Time")
);




答案 2 :(得分:0)

如果您使用破折号作为替代品,那么您的上一个示例[^a-zA-Z]+几乎可以使用。这使用否定的character class来匹配您指定的内容,以便包含空格和特殊字符。

请注意,如果您的作业有例如数字或下划线,那么也会被替换。您可以使用[^a-zA-Z0-9]+或不希望被替换的内容扩展角色类,或者如果您还希望将下划线\W+保持为匹配[^a-zA-Z0-9_]

function newTitle(str) {
  return str.replace(/[^a-zA-Z]+/g, '-').toLowerCase();
}
console.log(newTitle("Olympia, WA: SLP Full or Part Time"));