2013-10-29 98 views
0

我有一個字符串使用正則表達式

string = "width: 10px; height: 20px; whatever: 0px;"; 

我要高度部分更改爲50像素,剩下的機智,使最終的結果看起來像

string = "width: 10px; height: 50px; whatever: 0px;"; 
替換字符串的一部分

我試過string.replace("height: .*px;", "height: 50px;");但是這似乎不起作用。

有人可以幫我請

+3

我想如果你包含更多的上下文,可能會有比這更好的解決方案。這個字符串來自哪裏以及它如何被使用? –

+0

關於您正在使用的語言的任何信息? – aspyct

+0

字符串信息來自哪裏? – Chelseawillrecover

回答

2

Guilherme的回答是部分正確的:你確實需要傳遞正則表達式。然而,你的正則表達式有另一個問題:你的重複(.*px之前)是貪婪:它會匹配它所能做的一切。所以如果你有height: 20px; whatever: 0px,它會貪婪地匹配20px; whatever: 0px(看它如何消耗所有東西直到最後px?)。你將不得不通過追加了?重複將其更改爲一個懶惰的比賽:

string.replace(/height: .*?px;/, "height: 50px;"); 

爲了使其更加堅固的是,如果發生在高度,你可能要考慮到空白的可變量,或所述字符串的末尾(我使用先行):

string.replace(/height:\s*\d+px(?=;|$)/, 'height: 50px'); 

注我還使用了一個數字說明符(\d)而不是通配符元字符(.)。顯然這隻有在高度總是以整數單位指定時纔有效。

+0

更正了它。謝謝。 :) –

+0

感謝您的詳細解釋 – rfcoder89

0

如果你傳遞一個字符串作爲replace方法的第一個參數,它會嘗試從字面上更換您的字符串。要使用正則表達式,你必須與/字符包起來:

yourString = yourString.replace(/height: .*?px;/, "height: 50px;"); 

我同意@JamesMontagne,也許有什麼你正在嘗試做的更好的解決方案。這似乎有點哈克。

2

您需要更改正則表達式,使其非貪婪

"width: 10px; height: 20px; whatever: 0px;".replace(/height: .*?px;/, "height: 50px;") 

註明星後的問號 - 這告訴正則表達式引擎來尋找可能的最短匹配,即height: 20px;而不是最長的,height: 20px; whatever: 0px;

+0

我沒有意識到你可以調用像這樣的字符串文字的方法! – rfcoder89