繁体   English   中英

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

[英]How to replace part of a string using regex

我需要在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]中是相同的字符串会发生什么?

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

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

/(\\[[^\\]]*]\\[)[^\\]]*/没有g修饰符,它只会查找一个匹配项。

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

\\[[^\\]]*]\\[匹配[ ,然后除了]以外的任何 0+字符然后再][ (...)形成一个捕获组#1,它将记住您将能够通过$1反向引用进入替换的值。 [^\\]]*比其他比赛0+字符] ,这将被替换。

细节

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

有很多方法可以做到这一点。 一种可能的模式是

str.replace(/^(.+)(\[.+\])(\[.+\])(\[.+\])$/, `$1$2[${strToReplace}]$4`)

您可以看到$<number>是从regex(括号中的字符串组)引用捕获的字符串。 我们可以参考那些并重新排列它,但我们想要。

您可以像这样使用正则表达式/\\[[0-9]+\\]/ ,如下所示。

 var str = "asd[595442/A][30327][0]"; var strToReplace = "30333"; var strDesiredResult = str.replace(/\\[[0-9]+\\]/, '[' + strToReplace + ']'); console.log(strDesiredResult); //"asd[595442/A][30333][0]"; 

使用此模式:

'asd[595442/A][30327][0]'.replace(/^(asd\[[^\[\]]+\]\[)([^\[\]]+)(\]\[0\])$/, '$130333$3')

在这里测试

^            - match beginning of string
first group  - match "asd[", any chars except [ and ], "]["
second group - match any chars except [ and ]
third group  - match exactly: "][0]"
$            - match end of string

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM