0

我有一个字符串

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

我希望将高度部分更改为 50px 并保留其余部分,以便最终结果看起来像

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

我已经尝试过string.replace("height: .*px;", "height: 50px;");,但这似乎不起作用。

有人能帮助我吗

4

3 回答 3

2

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) 而不是通配符元字符 ( .)。显然,这只有在高度始终以整数单位指定时才有效。

于 2013-10-29T16:46:27.730 回答
2

您需要更改正则表达式以使其不贪婪

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

注意星号后的问号 - 它告诉正则表达式引擎找到最短的匹配,即height: 20px;而不是最长的匹配,height: 20px; whatever: 0px;

于 2013-10-29T16:46:38.563 回答
0

如果您将字符串作为replace方法的第一个参数传递,它将尝试逐字替换您的字符串。要使用正则表达式,您必须用/字符包装它:

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

我同意@JamesMontagne 的观点,也许对于您正在尝试做的事情有更好的解决方案。这似乎有点hacky。

于 2013-10-29T16:43:50.483 回答