正则表达式 |应用函数式编程将字符串转换为 URL 数据域



问题

填写 urlSlug 函数,以便它转换字符串标题并返回 URL 的带连字符的版本。可以使用本节中介绍的任何方法,而不要使用 replace。以下是要求:

输入是带有空格和标题大小写单词的字符串

输出是一个字符串,单词之间的空格替换为连字符 (-(

输出应全部为小写字母

输出不应包含任何空格。

我的解决方案

var globalTitle = " Winter Is  Coming";
function urlSlug(title) {
let regex = /(?<!s)s(?!s)/g

let a = title
.toLowerCase()
.trim()
.split(regex)
.join('-')
return a;
}
console.log(urlSlug(globalTitle))

我的问题

我想使用正面和负面的向前看/向后看来解决这个问题:我的特定问题似乎是字符串是否有多个空格。可以进行哪些更改才能完成这项工作?

您可以使用量词+表示一个或多个

var globalTitle = " Winter Is  Coming";
function urlSlug(title) {
let regex = /s+/g

let a = title
.toLowerCase()
.trim()
.split(regex)
.join('-')
return a;
}
console.log(urlSlug(globalTitle))

似乎不需要将字符串拆分为数组。

const slugify = (input = '') => 
input
.trim()
.replace(/s+/g, '-')
.toLowerCase()
;
console.log(
slugify(" Winter Is  Coming "),
);


PS:这些操作很容易手动完成,因为有大量的边缘情况需要处理......

我宁愿只安装带有一个漂亮且可配置的 API 的 https://www.npmjs.com/package/slugify

console.log(
slugify("   Winter is  Coming", { lower: true }),
);
<script src="https://cdn.jsdelivr.net/npm/slugify@1.4.0/slugify.js"></script>

可以在不使用正则表达式的情况下回答。使用过滤器方法,无需修剪该方法。使用过滤器可以从列表中删除空格。 有关过滤器的更多信息,请参阅 https://www.w3schools.com/jsref/jsref_filter.asp

function urlSlug(urlTitle) {
.split(" ")
.filter(substr => substr !== "")
.join("-")
.toLowerCase();
return urlTitle;
}

最新更新