Javascript 在最后一个斜杠 / 之后替换 href 的某些字符

Javascript Replace Certain Characters of href after the last slash /

本文关键字:href 字符 替换 之后 最后一个 Javascript      更新时间:2023-09-26

我有一个标签

<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();

我只是使用了空格标识符,并确保使其成为全局:)

编辑:添加了去除除[/- :]以外的所有非字母数字的条件。我首先去除了空格,并让第二个正则表达式忽略了连字符。我还使变量名称不同,因为您的原始代码修改了变量。只是我的喜好。

EDIT-AGAINN:这种原始方式很好,但现在有几种不同的正则表达式,也许具有更流畅正则表达式技能的人可以将它们浓缩下来并做出更好的答案?

试试这个

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);
您可以将

replacecallback一起使用:

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