我有一个字符串
string = "width: 10px; height: 20px; whatever: 0px;";
我希望将高度部分更改为 50px 并保留其余部分,以便最终结果看起来像
string = "width: 10px; height: 50px; whatever: 0px;";
我已经尝试过string.replace("height: .*px;", "height: 50px;");
,但这似乎不起作用。
有人能帮助我吗
我有一个字符串
string = "width: 10px; height: 20px; whatever: 0px;";
我希望将高度部分更改为 50px 并保留其余部分,以便最终结果看起来像
string = "width: 10px; height: 50px; whatever: 0px;";
我已经尝试过string.replace("height: .*px;", "height: 50px;");
,但这似乎不起作用。
有人能帮助我吗
Guilherme 的回答部分正确:您确实需要传入正则表达式。但是,您的正则表达式还有另一个问题:您的重复(.*
就在之前px
)是贪婪的:它将匹配它所能匹配的一切。所以如果你有height: 20px; whatever: 0px
,它会贪婪地匹配20px; whatever: 0px
(看看它是如何消耗所有东西的px
?)。您必须通过在重复后面附加 a 将其更改为惰性匹配?
:
string.replace( /height: .*?px;/, "height: 50px;" );
为了使其更加健壮,您可能需要考虑可变数量的空白,或者如果高度出现在字符串的末尾(我使用前瞻):
string.replace( /height:\s*\d+px(?=;|$)/, 'height: 50px' );
注意我还使用了数字说明符 ( \d
) 而不是通配符元字符 ( .
)。显然,这只有在高度始终以整数单位指定时才有效。
您需要更改正则表达式以使其不贪婪
"width: 10px; height: 20px; whatever: 0px;".replace(/height: .*?px;/, "height: 50px;")
注意星号后的问号 - 它告诉正则表达式引擎找到最短的匹配,即height: 20px;
而不是最长的匹配,height: 20px; whatever: 0px;
如果您将字符串作为replace
方法的第一个参数传递,它将尝试逐字替换您的字符串。要使用正则表达式,您必须用/
字符包装它:
yourString = yourString.replace(/height: .*?px;/, "height: 50px;");
我同意@JamesMontagne 的观点,也许对于您正在尝试做的事情有更好的解决方案。这似乎有点hacky。