我有一個字符串使用正則表達式
string = "width: 10px; height: 20px; whatever: 0px;";
我要高度部分更改爲50像素,剩下的機智,使最終的結果看起來像
string = "width: 10px; height: 50px; whatever: 0px;";
替換字符串的一部分
我試過string.replace("height: .*px;", "height: 50px;");
但是這似乎不起作用。
有人可以幫我請
我有一個字符串使用正則表達式
string = "width: 10px; height: 20px; whatever: 0px;";
我要高度部分更改爲50像素,剩下的機智,使最終的結果看起來像
string = "width: 10px; height: 50px; whatever: 0px;";
替換字符串的一部分
我試過string.replace("height: .*px;", "height: 50px;");
但是這似乎不起作用。
有人可以幫我請
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
)而不是通配符元字符(.
)。顯然這隻有在高度總是以整數單位指定時纔有效。
更正了它。謝謝。 :) –
感謝您的詳細解釋 – rfcoder89
如果你傳遞一個字符串作爲replace
方法的第一個參數,它會嘗試從字面上更換您的字符串。要使用正則表達式,你必須與/
字符包起來:
yourString = yourString.replace(/height: .*?px;/, "height: 50px;");
我同意@JamesMontagne,也許有什麼你正在嘗試做的更好的解決方案。這似乎有點哈克。
您需要更改正則表達式,使其非貪婪
"width: 10px; height: 20px; whatever: 0px;".replace(/height: .*?px;/, "height: 50px;")
註明星後的問號 - 這告訴正則表達式引擎來尋找可能的最短匹配,即height: 20px;
而不是最長的,height: 20px; whatever: 0px;
我沒有意識到你可以調用像這樣的字符串文字的方法! – rfcoder89
我想如果你包含更多的上下文,可能會有比這更好的解決方案。這個字符串來自哪裏以及它如何被使用? –
關於您正在使用的語言的任何信息? – aspyct
字符串信息來自哪裏? – Chelseawillrecover