我有一个标签
<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);
答案 0 :(得分:1)
这是一个垃圾箱。 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();
我刚刚使用了空格标识符,并确保将其设为全局:)
编辑:添加条件以去除除[/ - :]之外的所有非字数字。我首先剥离了空白,让第二个正则表达式忽略了这些空白。我还使变量名称不同,因为您的原始代码修改了变量。只是我的偏好。
EDIT-AGAINN:这种原创方式很不错,但是现在有一些不同的regEx,也许那些具有更流畅的正则表达技巧的人可以缩小这些并且做出更好的答案?
答案 1 :(得分:0)
您可以将replace
与callback
:
var href = document.getElementById("Link").getAttribute('href');
href = href.replace(/^((?:.*?\/{2})?[^\/]*\/)(.+)$/, function($0, $1, $2) {
return $1 + $2.replace(/[^\w\s.]+/g, '').replace(/\s+/g, '-').toLowerCase(); });
document.getElementById('Link').setAttribute("href", href);
//=> mysite.net/kn-abc-123.html
或在网址中使用ftp://
:
str = 'ftp://mysite.net/K&N abc 123.html'
str = str.replace(/^((?:.*?\/{2})?[^\/]*\/)(.+)$/, function($0, $1, $2) {
return $1 + $2.replace(/[^\w\s.]+/g, '').replace(/\s+/g, '-').toLowerCase(); });
//=> ftp://mysite.net/kn-abc-123.html
答案 2 :(得分:0)
试试这个
var str = document.getElementById("Link").getAttribute("href");
var lastitem = str.split("/").pop(); //taking out last item after slash
lastitem = lastitem.split( " " ).map( function(value){ return value.replace(/[*\(\)&/]/g, '').toLowerCase() } ).join( "-" ); //removing special characters and replacing space with hyphen
str = str.substring(0, str.lastIndexOf("/")) + lastitem;
document.getElementById('Link').setAttribute("href",str);