我有这个标签
<a id="Link" href="mysite.net/K&N abc 123.html">Link</a>
我需要使用 JavaScript 删除非字母数字字符,然后用破折号 -
替换空格,并将结果小写。
因此,/K&N abc 123.html
之后的所有内容均保持不变,其余的 href 保持不变。
最终结果是这样的
<a id="Link" href="mysite.com/kn-abc-123.html">Link</a>
我有一些代码要开始,但还没有完全正确地组合起来以给出正确的结果。
var str = document.getElementById("Link").getAttribute("href");
str = str.replace(/\W+/g, '-').toLowerCase();
document.getElementById('Link').setAttribute("href",str);
最佳答案
这是一个垃圾箱。 https://jsbin.com/gojoseduji/3/edit?html,output
var href = document.getElementById("Link").getAttribute('href');
var str = href
// replace each block of whitespace with a single '-' character
.replace(/\s+/g, '-')
// Filter out non alphanumerics, excluding : / -
.replace(/[^\:\/\-\w\s.]+/g, "")
// get rid of any hyphens that follow a slash
.replace(/\/-/g, '/')
.toLowerCase();
我刚刚使用了空白标识符,并确保将其设为全局:)
编辑:添加了条件以去除除 [/- :] 之外的所有非字母数字。我首先删除了空格,然后让第二个正则表达式忽略连字符。我还使变量名称不同,因为您的原始代码修改了变量。只是我的偏好。
再次编辑:这种最初的方式很好,但现在有一些不同的正则表达式,也许具有更流畅正则表达式技能的人可以将它们压缩并做出更好的答案?
关于Javascript 替换 href 最后一个斜杠/之后的某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35425918/