问题
填写 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;
}