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

sin*_*nte 5 javascript regex

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

以下示例应阐明我的意思

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

var strDesiredResult = "asd[595442/A][30333][0]";
Run Code Online (Sandbox Code Playgroud)

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

怎么做?

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

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

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

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

Wik*_*żew 8

您可以使用正则表达式,将匹配第一个[....],接着与[和捕捉部分成团(即你将能够通过反向引用来引用),然后匹配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);
Run Code Online (Sandbox Code Playgroud)

/(\[[^\]]*]\[)[^\]]*/还没有g修改,它会寻找一个只匹配.

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

\[[^\]]*]\[场比赛[,那么任何 0+比其他字符],然后][.该(...)形式捕获组#1,它会记住,你将能够获得与替换值$1反向引用.[^\]]*匹配除了以外的0+字符],这将被替换.

细节:

  • (- 捕获组开始
    • \[- 一个文字[符号(如果没有转义,它会启动一个字符类)
    • [^\]]*- 与零或更多匹配的否定字符类(由于* 量词)
    • ]- 一个文字](在一个字符类之外,它不必被转义)
    • \[ - 文字 [
  • )- 捕获组#1结束(可以使用替换模式的$1 反向引用访问其值)
  • [^\]]*- 0+(因为*量词匹配零次或多次出现,+如果你只需匹配有1次或多次出现的地方,则替换)除了以外的字符](在JS正则表达式中的字符类内,]必须在任何位置进行转义).