我有一个字符串
string = "width: 10px; height: 20px; whatever: 0px;";
我希望将高度部分更改为50px并保持其余部分,以便最终结果看起来像
string = "width: 10px; height: 50px; whatever: 0px;";
我已尝试过string.replace("height: .*px;", "height: 50px;");
,但这似乎不起作用。
有人可以帮助我吗
答案 0 :(得分: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
)而不是通配符元字符(.
)。显然,只有在始终以整数单位指定高度时才会有效。
答案 1 :(得分:2)
您需要更改正则表达式以使其非贪婪
"width: 10px; height: 20px; whatever: 0px;".replace(/height: .*?px;/, "height: 50px;")
请注意星标后的问号 - 告诉正则表达式引擎找到最短的匹配,即height: 20px;
而不是最长的height: 20px; whatever: 0px;
答案 2 :(得分:0)
如果您传递一个字符串作为replace
方法的第一个参数,它将尝试逐字地替换您的字符串。要使用正则表达式,必须使用/
字符包装它:
yourString = yourString.replace(/height: .*?px;/, "height: 50px;");
我同意@JamesMontagne的说法,也许有更好的解决方案可以解决您的问题。这看起来有点哈哈。