如何将消除空格和特殊字符与只有一个' - '字符? 这里有一点背景: 当我的公司将职业发布到我的职业部门时,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]+", " ");
但两者都没有接近所需的格式。
谢谢!
答案 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"));