使用正则表达式替换字符串的一部分

时间:2013-10-29 16:41:17

标签: javascript regex

我有一个字符串

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

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

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

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

有人可以帮助我吗

3 个答案:

答案 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的说法,也许有更好的解决方案可以解决您的问题。这看起来有点哈哈。