我有一个字符串使用正则表达式
string = "width: 10px; height: 20px; whatever: 0px;";
我要高度部分更改为50像素,剩下的机智,使最终的结果看起来像
string = "width: 10px; height: 50px; whatever: 0px;";
替换字符串的一部分
我试过string.replace("height: .*px;", "height: 50px;");
但是这似乎不起作用。
有人可以帮我请
我有一个字符串使用正则表达式
string = "width: 10px; height: 20px; whatever: 0px;";
我要高度部分更改为50像素,剩下的机智,使最终的结果看起来像
string = "width: 10px; height: 50px; whatever: 0px;";
替换字符串的一部分
我试过string.replace("height: .*px;", "height: 50px;");
但是这似乎不起作用。
有人可以帮我请
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
)而不是通配符元字符(.
)。显然这只有在高度总是以整数单位指定时才有效。
更正了它。谢谢。 :) –
感谢您的详细解释 – rfcoder89
如果你传递一个字符串作为replace
方法的第一个参数,它会尝试从字面上更换您的字符串。要使用正则表达式,你必须与/
字符包起来:
yourString = yourString.replace(/height: .*?px;/, "height: 50px;");
我同意@JamesMontagne,也许有什么你正在尝试做的更好的解决方案。这似乎有点哈克。
您需要更改正则表达式,使其非贪婪
"width: 10px; height: 20px; whatever: 0px;".replace(/height: .*?px;/, "height: 50px;")
注明星后的问号 - 这告诉正则表达式引擎来寻找可能的最短匹配,即height: 20px;
而不是最长的,height: 20px; whatever: 0px;
我没有意识到你可以调用像这样的字符串文字的方法! – rfcoder89
我想如果你包含更多的上下文,可能会有比这更好的解决方案。这个字符串来自哪里以及它如何被使用? –
关于您正在使用的语言的任何信息? – aspyct
字符串信息来自哪里? – Chelseawillrecover