2013-10-29 103 views
0

我有一个字符串使用正则表达式

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

我要高度部分更改为50像素,剩下的机智,使最终的结果看起来像

string = "width: 10px; height: 50px; whatever: 0px;"; 
替换字符串的一部分

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

有人可以帮我请

+3

我想如果你包含更多的上下文,可能会有比这更好的解决方案。这个字符串来自哪里以及它如何被使用? –

+0

关于您正在使用的语言的任何信息? – aspyct

+0

字符串信息来自哪里? – Chelseawillrecover

回答

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

+0

更正了它。谢谢。 :) –

+0

感谢您的详细解释 – rfcoder89

0

如果你传递一个字符串作为replace方法的第一个参数,它会尝试从字面上更换您的字符串。要使用正则表达式,你必须与/字符包起来:

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

我同意@JamesMontagne,也许有什么你正在尝试做的更好的解决方案。这似乎有点哈克。

2

您需要更改正则表达式,使其非贪婪

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

注明星后的问号 - 这告诉正则表达式引擎来寻找可能的最短匹配,即height: 20px;而不是最长的,height: 20px; whatever: 0px;

+0

我没有意识到你可以调用像这样的字符串文字的方法! – rfcoder89