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

2023-12-20

我需要替换 Javascript 中字符串的一部分

下面的例子应该可以澄清我的意思

var str = "asd[595442/A][30327][0]";
var strToReplace = "30333";

var strDesiredResult = "asd[595442/A][30333][0]";

基本上这意味着括号内的第二个区域应该替换为另一个字符串

怎么做?

到目前为止我所做的是这样的:

var str = "asd[595442/A][30327][0]";
var regex = /asd\[(.*)\]\[(.*)\]\[(.*)\]/;
var arrMatches = regex.exec(str);

该字符串正确显示在 arrMatches[2] 中,我可以替换它。但是如果 arrMatches[1] 中是相同的字符串会发生什么?

因为它应该只替换第二个括号区域中的值。


您可以使用与第一个匹配的正则表达式[....]随后是[并将该部分捕获到一个组中(您将能够通过反向引用来引用该组),然后匹配除]用您的替代品替换它们:

var str = "asd[595442/A][30327][0]";
var strToReplace = "30333";
console.log(str.replace(/(\[[^\]]*]\[)[^\]]*/, "$1" + strToReplace));

var strDesiredResult = "asd[595442/A][30333][0]";
console.log(strDesiredResult);

The /(\[[^\]]*]\[)[^\]]*/ has no g修饰符,它将寻找one仅匹配。

由于正则表达式引擎从左到右搜索字符串中的匹配项,因此您将获得左侧的第一个匹配项。

The \[[^\]]*]\[火柴[, then any0+ 个字符以外的字符]进而][. The (...)形成一个捕获组#1,它会记住您能够进入替换的值$1反向引用。[^\]]*匹配 0+ 个字符,除了]这将被替换。

Details:

  • ( - a capturing group http://www.regular-expressions.info/brackets.html start
    • \[- 字面意思[符号(如果未转义,它会启动字符类 http://www.regular-expressions.info/charclass.html)
    • [^\]]* - a 否定字符类 http://www.regular-expressions.info/charclass.html#negated匹配零个或多个(由于* 量词 http://www.regular-expressions.info/repeat.html)
    • ]- 字面意思](在字符类之外,不必转义)
    • \[- 字面意思[
  • )- 捕获组 #1 结束(可以通过以下方式访问其值$1 反向引用 http://www.regular-expressions.info/replacebackref.html从替换模式)
  • [^\]]*- 0+(作为*量词匹配零次或多次出现,替换为+如果您只需要匹配出现 1 次或多次的地方)除](在 JS 正则表达式的字符类中,]必须在任何位置转义)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用正则表达式替换字符串的一部分 的相关文章

随机推荐