Javascript 使用regexp替换字符串的一部分

Javascript 使用regexp替换字符串的一部分,javascript,regex,Javascript,Regex,我有一根绳子 string = "width: 10px; height: 20px; whatever: 0px;"; 我希望将高度部分更改为50px,其余部分保持不变,以便最终结果如下所示 string = "width: 10px; height: 50px; whatever: 0px;"; 我尝试了string.replace(“高度:.*px;”,“高度:50px;”)但是这似乎不起作用 有人能帮我一下吗如果您传递一个字符串作为replace方法的第一个参数,它将尝试按字面意思替

我有一根绳子

string = "width: 10px; height: 20px; whatever: 0px;";
我希望将高度部分更改为50px,其余部分保持不变,以便最终结果如下所示

string = "width: 10px; height: 50px; whatever: 0px;";
我尝试了
string.replace(“高度:.*px;”,“高度:50px;”)但是这似乎不起作用


有人能帮我一下吗

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

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

我同意@JamesMontagne的观点,也许有一个更好的解决方案来解决你的问题。这似乎有点老套。

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

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

我同意@JamesMontagne的观点,也许有一个更好的解决方案来解决你的问题。这似乎有点老套。

Guillerme的回答部分正确:您确实需要传入正则表达式。不过,您的正则表达式还有另一个问题:您的重复(
*
就在
px
之前)是贪婪的:它将尽可能匹配所有内容。所以如果你有
高度:20px;无论什么:0px
,它都会贪婪地匹配
20px;无论什么:0px
(查看它是如何消耗到上一个
px
?)。您必须通过在重复中添加
,将其更改为延迟匹配:

string.replace( /height: .*?px;/, "height: 50px;" ); 
为了使它更加健壮,您可能需要考虑可变的空白量,或者如果高度出现在字符串的末尾(我使用了lookahead):


注意:我还使用了数字说明符(
\d
)而不是通配符元字符(
)。显然,只有当高度始终以整数单位指定时,这才有效。

Guillerme的回答部分正确:您确实需要传入正则表达式。不过,您的正则表达式还有另一个问题:您的重复(
*
就在
px
之前)是贪婪的:它将尽可能匹配所有内容。所以如果你有
高度:20px;无论什么:0px
,它都会贪婪地匹配
20px;无论什么:0px
(查看它是如何消耗到上一个
px
?)。您必须通过在重复中添加
,将其更改为延迟匹配:

string.replace( /height: .*?px;/, "height: 50px;" ); 
为了使它更加健壮,您可能需要考虑可变的空白量,或者如果高度出现在字符串的末尾(我使用了lookahead):


注意:我还使用了数字说明符(
\d
)而不是通配符元字符(
)。显然,只有当高度始终以整数单位指定时,这才有效。

您需要更改regexp以使其不贪婪

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

注意星号后面的问号-它告诉regexp引擎找到最短的匹配,即
高度:20px而不是最长,
高度:20px;无论什么:0px

您需要更改regexp以使其不贪婪

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

注意星号后面的问号-它告诉regexp引擎找到最短的匹配,即
高度:20px而不是最长,
高度:20px;无论什么:0px

我认为,如果您包含更多的上下文,可能会有比这更好的解决方案。此字符串来自何处以及如何使用?有关您正在使用的语言的任何信息?字符串信息来自何处?@James此字符串是HTML元素style.cssText的一部分。直接改变高度似乎对我尝试另一种方法没有任何影响。Tbh我更感兴趣的是将此作为一个学习练习。为什么不在以后加载的css中添加一个新规则,同一个选择器只包含更改的高度属性?我认为如果您包含更多上下文,可能会有更好的解决方案。此字符串来自何处以及如何使用?有关您正在使用的语言的任何信息?字符串信息来自何处?@James此字符串是HTML元素style.cssText的一部分。直接改变高度似乎对我尝试另一种方法没有任何影响。Tbh我更感兴趣的是,这是一个学习练习。为什么不在以后加载的css中添加一个新规则,同一个选择器只包含更改的高度属性?更正了它。谢谢。:)谢谢你的详细解释更正了它。谢谢。:)谢谢你的详细解释,我没想到你可以对这样的字符串文本调用一个方法!我没有意识到你可以对这样的字符串文本调用一个方法!