2017-08-01 48 views
0

对不起,我误解了以前的问题,让我修改 的问题!jQuery如何用正则表达式替换url文件夹名称?

所有,我需要一个jQuery/JavaScript函数,可以替换字符串中的所有URL文件夹名称。例如,从(zh-hant到zh-hans);

<a href="http://somedomain.com/zh-hant/folder1/folder2">http://somedomain.com/zh-hant/folder1/folder2</a> 

更改为

<a href="http://somedomain.com/zh-hans/folder1/folder2">http://somedomain.com/zh-hans/folder1/folder2</a> 

我尝试下面的代码,但没有用。这些都没有改变。

var fromStr = '<a href="http://somedomain.com/zh-hant/folder1/folder2">http://somedomain.com/zh-hant/folder1/folder2</a>';  
var str = fromStr.replace(/\*zh-hant*/g, 'zh-hans'); 

任何人都可以帮忙吗? 非常感谢。

+1

为什么你在正则表达式有'\ *'?文件夹名称中没有'*'。 – Barmar

回答

0

首先,val()只适用于表单元素(文本输入等)。相反,您需要使用text()方法更改元素中的文本。

其次,jQuery中的val()text()方法在您没有参数的情况下调用它时会获得值/文本,并在您将其传递给字符串时设置值/文本。它无法在原地更新值。因此,一旦您检索了值并完成替换,您必须再次使用val()方法将其重新分配给元素。

var str = $(this).val().replace(/\*zh-hant*/g, 'zh-hans'); 
$(this).val(str); 

这可以进一步简化为:

$this.val($(this).val().replace(/\*zh-hant*/g, 'zh-hans')); 
+0

@Barmar我意识到,一半通过,我正在更新。 – Soviut

0

使用正则表达式/zh-hant/g和核心JS hrefinnerText的属性,如,

$('a').each(function() { 
 
    this.href = this.href.replace(/zh-hant/g, 'zh-hans'); 
 
    this.innerText = this.innerText.replace(/zh-hant/g, 'zh-hans'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="http://somedomain.com/zh-hant/folder1/folder2">http://somedomain.com/zh-hant/folder1/folder2</a>

+1

也是'.attr('href')' – Barmar

+0

是@Barmar,我正在更新我的答案,'href'&'innerText'比使用'text()'和'attr()'更快。对? –

0

你通过URL到URL构造函数来获取URL的.pathname,使用RegExp/^\/zh-hant/"/zh-hans"

var a = document.querySelector("a"); 
 
var url = new URL(a.href); 
 
var res = url.origin + url.pathname.replace(/\/zh-hant/, "zh-hans"); 
 
a.href = a.textContent = res; 
 
console.log(a.href);
<a href="http://somedomain.com/zh-hant/folder1/folder2">http://somedomain.com/zh-hant/folder1/folder2</a>

0

<a>元素取代"/zh-hant"没有价值。您需要将其替换为文本和href属性。你在正则表达式中也有错误;你并不需要一个正则表达式,因为你只是匹配确切的文本。

var newURL = $(this).attr('href').replace('zh-hant', 'zh-hans'); 
$(this).text(newURL).attr('href', newURL); 
+0

如果zh-hant也包含在URL的其他部分,例如作为域名的一部分,会发生什么情况? – guest271314

+1

这将取代第一场比赛。解决这个问题需要更复杂的URL解析。 – Barmar

0

您还没有更新的<a>标签...

要更新使用text()html()代替val().val()用于表单元素。

$(this).text($(this).text().replace(/\*zh-hant*/g, 'zh-hans')); 

到更新href

$(this).attr('href', $(this).attr('href').replace(/\*zh-hant*/g, 'zh-hans')); 
0

var $a = $(this); 
 
var str = $a.text().replace(/zh-hant/g, 'zh-hans'); 
 

 
$a.attr("href", str).text(str);