[英]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+字符]
,这将被替换。
细节 :
有很多方法可以做到这一点。 一种可能的模式是
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.