2017-06-29 90 views
-2

這裏是我的代碼:如何替換URL參數的值?

var str = 'http://localhost/myweb/login/resend_password?destination=http://localhost%2Fmyweb%2Fsearch%3Fs%3Dislamic_sources%26q%3D%25D8%25B3%25D9%2584%25D8%25A7%25D9%2585'; 
 

 
var res = str.replace('/(destination=)[^$|&]+/', '$1newval'); 
 

 
console.log(res);

雖然這是預期的結果:

http://localhost/myweb/login/resend_password?destination=newval 

爲什麼更換並不在我的代碼工作?注意到它的工作原理是this fiddle

+2

刪除*文字符號*的引號。 – revo

+1

是的,這是一個錯字。你試圖替換一個字符串,而不是正則表達式。 'var res = str.replace('/(destination =)[^ $ |&] + /','$ 1newval');'應該是'var res = str.replace(/(destination =)[^ $ | &] + /,'$ 1newval');' –

+1

Downvoters,請留下評論並解釋我的問題出了什麼問題?在提問之前,我已經嘗試了很多,並且在我的問題中添加了一個小提琴,這非常清楚。那麼,怎麼了? –

回答

1

您應該使用:

var str = 'http://localhost/myweb/login/resend_password?destination=http://localhost%2Fmyweb%2Fsearch%3Fs%3Dislamic_sources%26q%3D%25D8%25B3%25D9%2584%25D8%25A7%25D9%2585'; 
 

 
var res = str.replace(/(destination=)[^&]*/, '$1newval'); 
 

 
console.log(res);

正則表達式不應該在報價和正則表達式需要一些修正爲[^$|&]+沒有做什麼你覺得它在做什麼。

[^$|&]+不是一個$而不是|而不是&

,而不是隻非&任何字符匹配。

+0

啊,我明白了,thx,只是請你告訴我如何在正則表達式中定義這個? *「匹配任何字符,直到」&「或行尾」* –

+0

這就是我在回答中提供的內容。在[&]或輸入結束之前,[^&] *將會匹配任意字符的0個字符。 – anubhava

+0

啊好的thx。就像旁註一樣,你知道JS中的'\ K'是什麼嗎?我想避免在模式中匹配'destination ='。類似於[this](https://regex101.com/r/sYCEiX/3),但在JS –

0

把reg表達式不'這樣

var str = 'http://localhost/myweb/login/resend_password?destination=http://localhost%2Fmyweb%2Fsearch%3Fs%3Dislamic_sources%26q%3D%25D8%25B3%25D9%2584%25D8%25A7%25D9%2585'; 
 

 
var res = str.replace(/(destination=)[^$|&]+/, '$1newval'); 
 

 
console.log(res);

0

通過以下方法解決工作 `

var str = 'http://localhost/myweb/login/resend_password?destination=http://localhost%2Fmyweb%2Fsearch%3Fs%3Dislamic_sources%26q%3D%25D8%25B3%25D9%2584%25D8%25A7%25D9%2585'; 
var regexpr= /(destination=)[^$|&]+/g; 
var res = str.replace(regexpr, '$1newval'); 
console.log(res); 

` 必須刪除引號!